Я пытаюсь представить переменную в виде строки в целое число, я сделал это с помощью;
atoi(str.c_str())
Строка изначально получается из текстового файла и сохраняется в;
CharArrayPtr cmemblock;
Который затем представляется в виде строки;
string str;
for(int i = 0; i < numberofvalues; i++)
{
str = cmemblock[i];
int number = atoi(str.c_str());
cout << number;}
Если бы я сменил cout на print str;
str = cmemblock[i];
int number = atoi(str.c_str());
cout << str;
Номер отображается правильно, как хранится в текстовом файле
Тем не менее, я требую, чтобы вывод был целым числом, чтобы я мог представить его в цикле для поиска значения, хранящегося в массиве. Так вот, когда в игру вступает «число», именно поэтому я и прошу вашей помощи, когда;
cout << number;
Всякий раз, когда читается новая строка, она представляется как ‘0’, как мне удалить эту строку? Если вам требуется мой полный код, он находится в нескольких разных файлах .cpp и, чтобы никто не копировал мою работу, я могу отправить вам только по электронной почте, я уверен, что вы уже догадались, что это часть университетского задания.
Используя код участника Adosi, я придумал это;
std::string str;
for(int i = 0; i < numberofvalues; i++)
{
str = cmemblock[i];
std::stol(str);
int number = std::stoi(str);
cout << number;}
Я получаю ошибку R6010. Я сделал это неправильно?
std::stoi(str)
Используйте это вместо atoi
C ++ 11 имеет эту и несколько других функций, таких как std::stol()
долго, std::stof()
для поплавков и т. д.
Если у вас нет C++11
за std::stoi
но есть boost
вы могли бы использовать лексический состав
#include <boost/lexical_cast.hpp>
int main()
{
std::string s = "100";
try
{
int n = boost::lexical_cast<int>(s);
std::cout << "n = " << n << std::endl;
}
catch (boost::bad_lexical_cast)
{
std::cout << "conversion failed" << std::endl;
}
}
Это гарантирует, что допустимое преобразование может иметь место и выдает исключение, если оно не может
Относительно вашего редактирования — это требует компилятора C ++ 11 для работы
std::string str;
for(int i = 0; i < numberofvalues; i++)
{
str = cmemblock[i];
//std::stol(str); -> This line is unneeded as it converts string to a long
// Ideally you should check that str is valid here etc. before changing it to an int
int number = std::stoi(str);
cout << number;}
Другой вариант заключается в использовании std::stringstream
:
#include <sstream>
#include <string>
int string_to_int(const std::string &string) {
std::stringstream s(string);
s >> number;
if (!s.good()) {
throw std::exception();
}
return s;
}
int main(int argc, const char* argv[]) {
int number = string_to_int(argv[1]);
return 0;
}
Это не требует каких-либо внешних библиотек или C ++ 11 и должно быть совместимо с любым компилятором C ++.
редактировать
Выделил пример, чтобы показать, как вы можете написать свой собственный string_to_int
функция для упрощения использования std::stringstream
,