我实现了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?”,但我得到“WHATS”。我做错了什么?
答案 0 :(得分:5)
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);
答案 1 :(得分:2)
持续使用++会让你错过重要的案例。 int()的东西是不必要的噪音。你需要&amp;&amp;在检查条件下。可以使用 - =写入操作。
答案 2 :(得分:1)
这是一个使用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;
}
答案 3 :(得分:0)
重新:&#34;我希望程序输出&#34; WHATS UP?&#34;但相反,我得到了#34;什么&#34;。我做错了什么?&#34; 您没有提供有缺陷的代码。如果我不得不猜测,主要是你在调用argv [1],但我只是猜测你的主要内容不包括在内。