繁体   English   中英

C ++ toUpper Implementation

[英]C++ toUpper Implementation

我做了一个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;
}

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

我调用此函数的代码:

char h[] = "Whats up?";
cout << toUpper(h) << endl;

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

if( int(*sv) >= 97 || int(*sv) <= 122)

应该

if( int(*sv) >= 97 && int(*sv) <= 122)

或者,最好是

if( *sv >= 'a' && *sv <= 'z')
    *sv = *sv - ('a' - 'A');

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

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

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

*sv = (char)toupper(*sv);

拥有++,让你错过重要的案例。 int()的东西是不必要的噪音。 在检查条件下你需要&&。 可以使用 - =写入操作。

这是一个重写,使用for循环并修复您的条件和逐个增量:

char* toUpper(char* string)
{
    for(char* p=string; *p != '\0'; p++)
    {
        if(*p >= 'a' && *p <= 'z')  //Only if it's a lower letter
          *p -= 32;
    }
    return string;
}

re:“我希望程序输出”WHATS UP?“但是我得到了”WHATS“。我做错了什么?” 您没有提供有缺陷的代码。 如果我不得不猜测,主要是你在调用argv [1],但我只猜测你的主要内容不包括在内。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM