【以下回答由 GPT 生成】
代码中可能出现问题的地方是将大写字母转换为小写字母和将小写字母转换为大写字母的处理逻辑,导致最后的转换结果并不正确。
以下是修改后的代码:
#include <iostream>
#include <string>
using namespace std;
int main() {
string input;
char c;
cout << "请输入字符序列(遇到@符号停止): ";
getline(cin, input);
for (int i = 0; i < input.length(); i++) {
c = input[i];
if (c == '@') {
break;
}
if (isalpha(c)) {
if (isupper(c)) {
c = tolower(c);
} else {
c = toupper(c);
}
cout << c;
}
}
return 0;
}
这里对字符的转换操作不直接输出到控制台上,而是先将转换后的字符保存到变量c
中,最后再统一输出。这样可以确保转换后的字符都按照顺序输出。
请再次运行代码并测试,看是否能够正确输出转换后的结果。
【相关推荐】
因为打印没有放到两个else if语句里面,所以当是字母或其他非数字字符时都会打印,所以将打印放到两个else if语句里面;
然后第一个if判断也可以去除。
修改如下:
参考链接:
#include <iostream>
using namespace std;
int main(void){
char input='1';
cout<<"enter the character:";
// https://blog.csdn.net/qq_41682681/article/details/80813747
cin.get(input);
// cout<<"input="<<input<<endl;
while(input!='@'){
// if(isdigit(input)){ // 这个判断可以去除
// cin.get(input);
// continue;
// // https://www.runoob.com/cprogramming/c-function-islower.html
// }else
if(islower(input)){ // 如果是小写字母则转为大写字母或输出
input=toupper(input);
// cout<<"2,";
cout<<input;
// cin.get(input);
// continue;
}else if(isupper(input)){ // 如果是大写字母,则转为小写字母并输出
input=tolower(input);
// cout<<"3,";
cout<<input;
}
// 再次获取输入
cin.get(input);
}
return 0;
}