小写到大写没有toupper

时间:2014-07-31 16:13:07

标签: c++

有人可以告诉我为什么这行

  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';

    }
  }

3 个答案:

答案 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]