我让程序按预期工作,但谁能解释一下它是如何工作的?
#include <iostream>
using namespace std;
int main(void) {
int exit;
string name;
cin >> name;
for (int i = 0; i < name.length(); i++) {
// the line below is the one I don't understand
if ('a' <= name[i] && name[i] <= 'z') name[i] = char(((int)name[i]) - 32);
}
cout << name;
cin >> exit;
return 0;
}
编辑:让我重新措辞:
我不明白的是字符串到数组的处理是如何工作的,如:
'a'<= name[i]
.这到底比较了什么以及如何比较?
编辑2 感谢大家的快速回复,爱你们。我想通了。
最佳答案
这是一行:
if('a'<=name[i] && name[i]<='z')name[i]=char(((int)name[i])-32);
segmentation :
if( 'a'<=name[i] ) {
if( name[i]<='z' ) {
// name_int is a temporary, which the above code implicitly creates,
// but doesn't give a name to:
int name_int = name[i];
name_int = name_int - 32;
name[i] = char(name_int);
}
}
请注意 32
在您使用的字符编码中恰好等于 'a'-'A'
。
(技术上 name_int
应该是 int&&
或类似的东西,但没必要那么困惑。)
关于c++ - 这个数组转换是如何工作的(使用字符串将小写字母转换为大写字母)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14511727/