atoi и массив строк

У меня есть массив строк и массив целых чисел. Я хочу преобразовать элементы массива строк в целое число, а затем сохранить их в массиве целых чисел. Я написал этот код:

string yuzy[360];
int yuza[360];

for(int x = 0;x<360;x++)
{
    if(yuzy[x].empty() == false)
    {

         yuza[x]=atoi(yuzy[x]);
         cout<<yuza[x]<<endl;
    }
    else
        continue;
}

этот фрагмент кода дает эту ошибку: ошибка: невозможно преобразовать 'std::string {aka std::basic_string}' в 'const char*' для аргумента '1' в 'int atoi (const char*)'

Когда я записываю содержимое строки (-75dbm) в функцию atoi, все работает нормально. Но когда я пишу (юзы[х]), я получаю ошибку. Как я могу заставить atoi хорошо работать со строковым массивом? Спасибо.


person bahadirtr    schedule 03.08.2012    source источник
comment
Просто предложение, но хотя установка -75dbm действительно работает, это не очень хорошая практика. Попробуйте немного почистить свои числовые строки, прежде чем преобразовывать их.   -  person Component 10    schedule 03.08.2012


Ответы (3)


atoi() принимает строки C (указатели символов), а не строковые объекты C++. Использовать

atoi(yuzy[x].c_str());

вместо.

person Community    schedule 03.08.2012
comment
это приводит к ошибке: error: request for member ‘c_str’ in ‘a.std::basic_string<_CharT, _Traits, _Alloc>::operator[]<char, std::char_traits<char>, std::allocator<char> >(1u)’, which is of non-class type ‘char’ cout<<atoi(a[1].c_str())<<endl; - person Muhammad Umer; 26.09.2014

В качестве альтернативы atoi вы можете использовать std::stoi и связанные функции, если у вас есть поддержка C++11.

yuza[x] = std::stoi(yuzy[x]);
person juanchopanza    schedule 03.08.2012

atoi принимает строку в стиле C в качестве параметра, поэтому вы можете использовать atoi(yuzy[x].c_str());

person Bình Nguyên    schedule 03.08.2012