2014-12-23 3 views
0

У меня есть простая программа, в которой я хочу хранить входные данные в матрицах для легкого доступа. У меня возникли проблемы с преобразованием простого строкового символа в int, может кто-нибудь объяснить, почему мой код дает мне это сообщение, когда я пытаюсь скомпилировать?Ошибка при попытке преобразовать строковый символ в int

acm.cpp:20:42: error: request for member ‘c_str’ in ‘temp.std::basic_string<_CharT, _Traits, _Alloc>::operator[]<char, std::char_traits<char>, std::allocator<char> >(((std::basic_string<char>::size_type)j))’, which is of non-class type ‘char’ 

Проблема, кажется, с моей помощью функции c_str(), но если я не ошибаюсь, это необходимо для преобразования символов в Int значения.

Мой код:

#include <cmath> 
#include <cstdio> 
#include <vector> 
#include <iostream> 
#include <algorithm> 
using namespace std; 

int main() { 
    // read input from console 
    int N, M; 
    cin >> N; // number of people 
    cin >> M; // max number of topics 

    // read in binary numbers into matrix 
    int binaryNumbers[N][M]; 
    for (int i = 0; i < N; i++) { 
    string temp; 
    cin >> temp; 
    for (int j = 0; j < M; j++) { 
     binaryNumbers[i][j] = atoi(temp[j].c_str()); 
     cout << binaryNumbers[i][j] << endl; 
    } 
    } 

    return 0; 
} 
+0

положить '#include ' – BLUEPIXY

+1

Вы можете использовать только '.c_str()' на 'станд: : string'. 'temp' является' std :: string', но 'temp [j]' является 'char'. – Barmar

+0

, который является неклассическим типом 'char', дает вам довольно хорошее представление о том, что вам нужно изменить. –

ответ

0

Использование:

binaryNumbers[i][j] = temp[j] - '0'; 

Вам не нужно использовать atoi для одной цифры, то его числовое значение просто его смещение от '0'.

Но если вы действительно хотите использовать atoi, вам придется создать отдельную строку:

for (int j = 0; j < M; j++) { 
    char digit[2] = "0"; 
    digit[0] = temp[j]; 
    binaryNumbers[i][j] = atoi(digit); 
    cout << binaryNumbers[i][j] << endl; 
} 
+0

Это прекрасно, теперь он работает! Есть ли какая-либо польза от использования одной над другой сложности? – mudejar

+0

Первый из них проще. Второй выполняет ненужный вызов функции, но он избегает необходимости знать свойство систем кодирования символов, что цифры являются последовательными символами. Также было бы легче адаптировать его к другим радикам, которые не имеют этого свойства. – Barmar