分配给整数时的字符串数组会产生一个奇怪的值[重复]

Posted

技术标签:

【中文标题】分配给整数时的字符串数组会产生一个奇怪的值[重复]【英文标题】:String array when assigned to an integer produces a weird value [duplicate] 【发布时间】:2020-09-24 23:19:04 【问题描述】:

我正试图找出一个朋友发给我的代码,但我不知道为什么存在这个特定代码。

目标是当您在字符串中键入一个 3 位数字序列时,它会将其转换为 int 并反向打印该序列。

string s;
cout <<"enter integer sequence";
cin >> s;
int firstdig, seconddig, thirddig;
firstdig = s[0];
seconddig = s[1];
thirddig = s[2];

cout << thirddig << seconddig << firstdig;

这是这段代码的问题

当我输入“123”时,输出变为“515049”而不是“321”

然而

这是明显解决问题的代码

string s;
cout <<"enter integer sequence";
cin >> s;
int firstdig, seconddig, thirddig;
firstdig = s[0] - '0';
seconddig = s[1] - '0';
thirddig = s[2] - '0';

cout << thirddig << seconddig << firstdig;

这次我输入“123”,输出变成“321”

我的主要问题是,“515049”从何而来,代码“-'0'”有什么作用? 我不知道那个代码是做什么的。 C++ C++ C++

【问题讨论】:

51、50 和 49 分别是 '3'、'2' 和 '1' 的 ASCII 值。因此,'0' 的 ASCII 值是 48,这解释了您的第二个观察结果。 数字变量应该是char,而不是int 【参考方案1】:

在第一个代码中,您将 char 直接转换为 int,正如 cmets 中指出的那样,它获取字符的 ASCII 值。

在第二个代码中,当你减去字符的 ASCII 值和 '0' 时,你会得到字符的原始值。

【讨论】:

以上是关于分配给整数时的字符串数组会产生一个奇怪的值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将 NSMutableArray 分配给另一个时的奇怪行为(iOS 6)

处理产生奇怪结果的字节数组的字符串构造函数[重复]

Java:访问字符串数组时的ArrayIndexOutOfBounds [重复]

随机产生N个1,1000之间不重复的整数存入数组A中,并按从大到小顺序排列。键入整数X,查找:若无,则插入,

java.lang.ArrayStoreException:将不正确类型的值分配给 Object [] 数组时 [重复]

列表分配中的字典导致奇怪的输出[重复]