C++使用单参数void函数实现字母大小写互转问题求助
问题解决说明
报错原因
- 最初版本使用
strncat时参数类型不匹配:strncat第二个参数要求是C风格字符串(const char*类型),你传入trans返回的单个char类型值,自然触发类型转换报错。 - 你当前写的
void trans函数是值传递逻辑:形参char c是实参的临时副本,函数内部对c的修改仅作用于副本,不会把修改结果带回main函数,必须将参数改为引用传递才能实现修改效果。
修改方案
第一步:修正trans函数定义
将参数改为char&引用类型,保证函数内部修改直接作用于外部实参,非字母字符直接保留原样即可:
void trans(char& c) { if(c >= 'a' && c <= 'z') c -= 32; else if(c >= 'A' && c <= 'Z') c += 32; // 非字母字符不做修改 }
第二步:补全main函数循环逻辑
不需要用strncat,直接逐个处理字符后赋值给s2的对应位置,最后补字符串结束符即可:
int main() { char s[101], s2[101] = ""; cin >> s; int i; int len = strlen(s); for(i=0; i<len; i++) { char tmp = s[i]; trans(tmp); s2[i] = tmp; } s2[len] = '\0'; // 补C字符串结束标记 cout << s2; return 0; }
运行效果验证
输入dOgdoG时,程序会逐个字符反转大小写,最终输出DoGDOg,符合要求。
内容的提问来源于stack exchange,提问作者MickeyMoise
相关产品推荐
相关产品推荐

