我必须编写一个程序来读取@符号的键盘输入并回显除数字之外的输入,将每个大写字符转换为小写,反之亦然。
到目前为止,这是我的代码:
#include <iostream>
#include <cctype>
using namespace std;
int main()
{
char ch;
cout << "Enter characters: " << endl;
while (cin.get(ch))
{
if (ch == '@')
break;
if (isdigit(ch))
continue;
if (islower(ch))
ch = toupper(ch);
if (isupper(ch))
ch = tolower(ch);
cout << ch;
}
return 0;
}
我不知道我的代码有什么问题,但有些情况下,当我输入字符时,它只将大写字母转换为小写字母,而不是将小写字母转换为大写字母。 例如,我的输出是:
Enter characters:
Hello // my input
hello // output
正如您所看到的,它只会将大写字母转换为小写字母,并且不会将任何小写字母转换为大写字母,就像它应该的那样。
我的代码有问题吗?如果有的话,我真的找不到它。 我是C ++的新手,我需要帮助。
提前致谢。
答案 0 :(得分:3)
您将小写字母转换为大写,然后再将它们转换回来。您应该使用else if
来避免不必要的判断:
if (islower(ch))
ch = toupper(ch);
else if (isupper(ch))
ch = tolower(ch);
答案 1 :(得分:2)
如果ch是小写字母,请在此处将其设为大写字母:
if (islower(ch))
ch = toupper(ch);
然后,因为ch
刚刚转换为大写
if (isupper(ch)) // <-- this is now true
ch = tolower(ch); // <-- and this is now executed
您可以使用else
解决此问题:
if (islower(ch)) {
ch = toupper(ch);
} else if (isupper(ch)) {
ch = tolower(ch);
}
我扔了一些牙套,因为我喜欢牙套。当您想要向if语句的分支添加更多命令时,它们有助于避免错误。
答案 2 :(得分:1)
根据您的代码,当小写字母转换为大写时,它将转换为小写,因为它现在是一个大写字母。你应该这样做:
while (cin.get(ch))
{
if (ch == '@')
break;
if (isdigit(ch))
continue;
if (islower(ch))
{
ch = toupper(ch);
cout << ch;
continue;
}
if (isupper(ch))
{
ch = tolower(ch);
cout << ch;
}
}
或者像这样:
while (cin.get(ch))
{
if (ch == '@')
break;
else if (isdigit(ch))
continue;
else if (islower(ch))
ch = toupper(ch);
else if (isupper(ch))
ch = tolower(ch);
cout << ch;
}