2014-02-25 102 views
0

我必須得到由空格分隔的2位數字的字符串,以某種方式取出數字並對它們進行操作。但值都走錯了,親眼看到:給出奇怪值的字符串

... 
string = "08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08"; //example 

for (int i = 0; i < string.size()-2; i += 3){ 
arr[i] = 10 * string[i] + string[i+1];  
cout << arr[i] <<' '<< 10 * string[i] <<' '<< string[i] << string[i+1] <<endl; 
} 

output: 
536 480 08 i guess 0 times 10 isn't 480 as well as that plus 8 equals 536 
530 480 02 
550 500 22 
625 570 97 
566 510 38 
543 490 15 
528 480 00 
568 520 40 
528 480 00 
603 550 75 
532 480 04 
533 480 05 
535 480 07 
606 550 78 
580 530 52 
540 490 12 
578 530 50 
605 550 77 
619 570 91 
536 480 08 
+1

什麼是'arr'?你是否想要對ascii字符值進行數學計算? –

回答

2

你與人物,而不是數字的數值的ASCII值做你的計算。例如。 '0'是48,'1'是49,依此類推。

for (int i = 0; i < string.size()-2; i += 3){ 
    arr[i] = 10 * (string[i]-'0') + (string[i+1]-'0');  
    cout << arr[i] <<' '<< 10 * string[i] <<' '<< string[i] << string[i+1] <<endl; 
} 
0

將字符轉換爲整數將爲您提供表示字符的數字值;對於數字,這不同於數字的值。幾乎所有這些日子裏你會發現的計算機都使用ASCII編碼,其中'0'由48表示,'1'由49表示,依此類推。

你想減去代表'0',使'0'變爲0值,'1'變爲1,依此類推:

arr[i] = 10 * (string[i] - '0') + (string[i+1] - '0'); 
1

你誤解了int類型你檢索。舉個例子,你正在拉扯08

'0'0,這是48
'8'8,這是56

48 * 10 + 56 = 536 

,而不是採取一個字符的ASCII表示和使用,在你的計算,使用atoi

此外,不要去char字符,你可能想看看split a string of text in C++的許多方法。

-1

您可以使用stoi()(string to integer)將您的字符串轉換爲數值,然後執行您的操作。