You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:27:02