字符串给出了奇怪的价值观

时间:2014-02-25 00:55:24

标签: c++ string

我必须得到一个由空格分隔的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

4 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

你误解了你正在检索的int值。举个例子,你要拉08

'0'不是0,而是48
'8'不是8,而是56

48 * 10 + 56 = 536

而不是获取角色的ASCII表示并在计算中使用它,请使用atoi

此外,您可能希望查看split a string of text in C++的多种方式,而不是按字母排序。

答案 2 :(得分:0)

将字符转换为整数可以得到表示字符的数值;对于数字,这与数字的值不同。现在几乎每台计算机都会使用ASCII编码,其中'0'由值48表示,'1'由49表示,依此类推。

您想要减去代表'0'的值,以便'0'变为0,'1'变为1,依此类推:

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

答案 3 :(得分:-1)

您可以使用stoi()(字符串到整数)将字符串转换为数值,然后执行操作。

相关问题