C++ toUpper Implementation

Dav*_*log 2 c++ implementation toupper

我做了一个toUpper()的实现.它不起作用100%.

代码:

char* toUpper(char* string)
{
    char* sv = string;
    while(*sv++ != '\0')
    {
        if( int(*sv) >= 97 || int(*sv) <= 122)  //Only if it's a lower letter
            *sv = char( *sv - 32);
    }
    return string;
}
Run Code Online (Sandbox Code Playgroud)

我知道低位字母的数字从97到122(ASCII格式),高位字母的数字从65到90.低位到高位字母之间正好有32个数字.所以我只是从较低的字符减去32.

我调用此函数的代码:

char h[] = "Whats up?";
cout << toUpper(h) << endl;
Run Code Online (Sandbox Code Playgroud)

我希望程序输出"WHATS UP?" 但相反,我得到了"什么".我做错了什么?

sim*_*onc 5

if( int(*sv) >= 97 || int(*sv) <= 122)
Run Code Online (Sandbox Code Playgroud)

应该

if( int(*sv) >= 97 && int(*sv) <= 122)
Run Code Online (Sandbox Code Playgroud)

或者,最好是

if( *sv >= 'a' && *sv <= 'z')
    *sv = *sv - ('a' - 'A');
Run Code Online (Sandbox Code Playgroud)

您还需要移动增量点sv.当前代码跳过检查中的第一个字符string

while(*sv != '\0')
{
    if( *sv >= 'a' && *sv <= 'z')
        *sv = *sv - ('a' - 'A');
    sv++;
}
Run Code Online (Sandbox Code Playgroud)

最后,我确定你已经意识到这一点,但以防万一...如果这不是一个家庭作业或其他学习练习,标准C toupper功能将为你做同样的工作

*sv = (char)toupper(*sv);
Run Code Online (Sandbox Code Playgroud)

  • 正是.空格(`''`)是ASCII 32,所以减去32会产生一个NUL,导致`cout`停在那里. (6认同)