2015-01-09 4 views
-1

Я искал это, но другие ответы меня путают. Я просто хочу преобразовать символ в целое число в C++. Я кое-что прочитал о функции atoi, но он не работает для меня. Вот мой код:Проблемы преобразования Char в Integer в C++

string WORD, word; 

cout<<"PLEASE INPUT STRING: "<<endl; 

getline(cin,WORD); 

for(int i=0; i<WORD.length(); i++){ 

if(isdigit(WORD[i])){ 

word = atoi(WORD[i]); //Here is my problem. 

}else{ 

    cout<<"NO DIGITS TO CONVERT."<<endl; 

}//else 

}//for i 

BTW, я проверил, является ли символ первым.

+2

Я думаю, вы должны быть более четкими в отношении того, какие вход и выход вы хотели бы иметь. (Я прошу пример строки ввода и вывода, которую вы хотели бы иметь) –

+1

Символ * - это целое число, хотя, возможно, это не целое число, которое вы хотите. –

+0

«NO DIGITS TO CONVERT» - к * what *? вы, похоже, ищете цифры цифр '0 '..' 9'', затем пытается преобразовать их в свои целые значения, но затем сохраняет их обратно в строку (' word'). * Какую проблему вы действительно ** пытаетесь решить *? – WhozCraig

ответ

3

atoi принимает строку, заключенную в NUL. Он не работает ни на одном символе.

Вы могли бы сделать что-то вроде этого:

int number; 
if(isdigit(WORD[i])){ 
    char tmp[2]; 
    tmp[0] = WORD[i]; 
    tmp[1] = '\0'; 
    number = atoi(tmp); // Now you're working with a NUL terminated string! 
} 
+2

, и он возвращает int, когда OP пытается присвоить его строке ... –

+0

Ha! Хорошая точка зрения! – Jason

3

Если WORD[i] это цифра, вы можете использовать выражение WORD[i] - '0' для преобразования цифры в десятичное число.

string WORD; 
int digit; 

cout<<"PLEASE INPUT STRING: "<<endl; 

getline(cin,WORD); 

for(int i=0; i<WORD.length(); i++){ 
    if (isdigit(WORD[i])){ 
     digit = WORD[i] - '0'; 
     cout << "The digit: " << digit << endl; 
    } else { 
     cout<<"NO DIGITS TO CONVERT."<<endl; 
    } 
} 
2

** Вы можете решить ее:

digit = WORD[i] - '0'; 

заменить его на вашей неправильной линии.

и вы можете

добавления: отредактированы cruelcore внимание **

+0

И что хранит обратно в 'std :: string word' * how *? – WhozCraig

+0

Думаю, вы могли бы использовать противоположность вычитания и добавить «0» к вашей цифре. Другое предложение - использовать 'std :: ostringstream'. –

+0

'string & operator =' применим для аргумента 'char'. просто введите 'WORD [i] - '0'' в char, например' word = (char) (WORD [i] -' 0 '); ' – cruelcore1

1

К ответу на user4437691, с добавлением. вы не можете установить строку в int, используя =, но вы можете установить ее на символ, в соответствии с этой ссылкой: http://www.cplusplus.com/reference/string/string/operator=/

Так что бросьте его на символ.

слово = (символ) (WORD [i] - '0');