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

C++姓名格式转换代码求助:输入语句错误导致无输出

修正姓名格式转换的C++代码问题

原代码的核心问题

  • cin >> str.length(name); 是完全错误的语法,既不符合输入逻辑,也无法读取包含空格的完整姓名(cin >> str 会在遇到空格时停止读取)。
  • 截取姓氏时,str.substr(0, pos - 1) 多减了1,pos 是", "的起始索引,直接用str.substr(0, pos)就能拿到完整的lastName。
  • 存在未使用的冗余变量name和substr。
  • 没有处理输入格式错误的情况(比如找不到", "),会导致程序异常。

修正后的代码

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string str;
    size_t pos; // 用size_t匹配string::find的返回类型,更规范
    cout << "Enter a name in the following format: last name, first name middle name" << endl;
    getline(cin, str); // 读取整行输入,包含空格
    
    pos = str.find(", ");
    if (pos == string::npos) { // 检查输入格式是否符合要求
        cout << "Invalid input format! Please use 'lastName, firstName middleName'." << endl;
        return 1;
    }
    
    // 提取名和姓并重新拼接输出
    cout << "The student's name is " << str.substr(pos + 2) << " " << str.substr(0, pos) << endl;
    return 0;
}

关键修正说明

  1. 输入读取:用getline(cin, str)替代错误的cin语句,确保能读取包含空格的完整姓名。
  2. 类型规范:将int pos改为size_t pos,匹配string::find的返回类型,避免类型不匹配警告。
  3. 格式校验:增加了对", "分隔符的检查,输入格式错误时给出提示并退出,提升程序健壮性。
  4. 字符串截取简化:str.substr(pos + 2)直接从逗号空格的下一位取到结尾,无需手动计算长度;str.substr(0, pos)直接截取到逗号前的姓氏,逻辑更清晰。
  5. 冗余清理:移除了未使用的变量,精简代码结构。

内容的提问来源于stack exchange,提问作者calir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:25:22