2014-02-25 104 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)将您的字符串转换为数值,然后执行您的操作。