题目描述
本题要求编写程序,对一个以“#”号结束的字符串,将其小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其他字符不变输出。
这是为什么?困扰我好久了,求指点
首先,代码的执行从int main() { 开始 },顺序是从上往下,一句一句的执行。循环里,两个if () 是并列的,第一个if (条件一) 执行完,把大写的字符转换为小写。然后第二个if (条件二) 必会执行,如果刚好条件满足,又把小写转换为大写。 if(条件一) else if (条件二) , 这写法判断是二选一,一次只有其中一条 if(条件满足) 会被执行。
该回答引用chatgpt:
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
int main()
{
char str[101];
cin.getline(str, 101, '#'); // 读入字符串直到遇到 '#' 符号
for (int i = 0; i < strlen(str); i++)
{
if (islower(str[i])) // 如果是小写字母,转换为大写字母
str[i] = toupper(str[i]);
else if (isupper(str[i])) // 如果是大写字母,转换为小写字母
str[i] = tolower(str[i]);
cout << str[i];
}
return 0;
}
这个程序首先使用cin.getline()函数读入字符串,遇到'#'结束。然后对字符串进行循环遍历,使用islower()函数判断是否是小写字母,使用toupper()函数将其转换为大写字母,使用isupper()函数判断是否是大写字母,使用tolower()函数将其转换为小写字母。最后输出转换后的字符串。
不知道你这个问题是否已经解决, 如果还没有解决的话:可能导致这种情况出现的因素是读入的字符串中只含有一种大小写字母,导致另一种大小写字母没有变化。
解决这个问题的方法是可以添加prompt,让用户可以选择要进行哪种大小写字母的转换。具体代码如下:
#include<iostream>
#include<string>
using namespace std;
int main(){
string s;
char choice;
cout << "请输入要转换的字符串,直到出现'#'符号:" << endl;
getline(cin,s,'#');//读入字符串,直到出现'#'符号
cout << "请选择要进行哪种大小写字母转换(输入1转换小写字母为大写字母,输入2转换大写字母为小写字母):" << endl;
cin >> choice;
if(choice == '1'){
for(int i=0;i<s.length();i++){
if(s[i]>='a'&&s[i]<='z') s[i]-=32;//小写字母转换成大写字母
//其他字符不变
}
} else if(choice == '2'){
for(int i=0;i<s.length();i++){
if(s[i]>='A'&&s[i]<='Z') s[i]+=32;//大写字母转换成小写字母
//其他字符不变
}
} else {
cout << "输入无效!" << endl;
}
cout << "转换后的结果为:" << endl;
cout << s << endl;//输出转换后的字符串
return 0;
}
在这个代码中,我们添加了一个名为choice的变量,用于存储用户选择的转换方式(1表示将小写字母转换为大写字母,2表示将大写字母转换为小写字母)。然后根据用户的选择,分别执行相应的转换代码,最后输出转换后的字符串。这样,用户就可以灵活地选择要进行哪种转换了。