有人可以告诉我为什么这行
s[i]=s[i]-'a'+'A';
是否将小写转换为大写?更具体地说,我不明白
为什么'a'
和'A'
被string s
中的相应字符替换。
string s="Print My Name";
for (int i=0; i<s.length(); i++)
{
if (s[i]>='a' && s[i]<='z')
{
s[i]=s[i]-'a'+'A';
}
}
答案 0 :(得分:7)
是否将小写转换为大写?
没有。尝试传递"naïve"
之类的东西.C和C ++标准没有指定任何真正有用的字符串操作函数,尽管有些实现扩展它们以使它们更有用。
如果你想要实际工作的字符串处理功能,虽然界面不如引导的核弹头友好,你可以看一下ICU。
答案 1 :(得分:2)
表达式
s[i]=s[i]-'a'+'A'
C ++中的(以及C)意味着
s[i]=s[i]-<code of character a>+<code of character A>
这个假设所有小写字母都是连续的,并且所有大写字母都是连续的,这使得它能够正常工作。
当然,上述假设通常只适用于英文字符。
答案 2 :(得分:-1)
表达式:
s[i]-'a'
返回字母表中字符的从零开始的位置。然后添加'A'
将该位置添加到大写字母“A”,给定大写等同于s[i]
。