массивы — C ++ строка для целочисленной проблемы с использованием atoi (str.c_str ())

Я пытаюсь представить переменную в виде строки в целое число, я сделал это с помощью;

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. Я сделал это неправильно?

0

Решение

std::stoi(str)

Используйте это вместо atoi

C ++ 11 имеет эту и несколько других функций, таких как std::stol() долго, std::stof() для поплавков и т. д.

http://en.cppreference.com/w/cpp/string/basic_string/stol

2

Другие решения

Если у вас нет 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;}
0

Другой вариант заключается в использовании 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,

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector