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

C++如何读取命令行中双引号内子串以实现AVL树插入操作

解决方案

你当前用cin >> Name读取名字的逻辑不生效,是因为cin默认以空白字符作为分隔符,遇到空格、制表符、换行就会停止读取,只能拿到引号内第一个空格前的部分内容,无法读取完整的带空格的名字,也不会自动剔除前后的双引号。

方案1:使用标准库std::quoted(推荐)

C++11及之后版本的标准库提供了std::quoted工具,专门用于读取带双引号包裹的字符串,会自动剔除前后的双引号,还支持处理字符串内部的转义引号,仅需要引入<iomanip>头文件即可,修改成本极低。
修改后的代码如下:

#include <iomanip> // 引入std::quoted所需头文件
// 其他原有头文件保留
#include <iostream>
#include <string>
using namespace std;

// ... 你的其他代码
if (command == "insert") // 注意你原来的变量名拼写是comand,这里修正为正确拼写
{
    int ID = 0;
    string Name;
    cin >> std::quoted(Name); // 替换原来的cin >> Name
    cin >> ID;
    root = insertInfo(root, Name, ID);
}

方案2:手动实现引号内容读取

如果你使用的C版本不支持C11,或者需要自定义读取逻辑,可以手动控制读取流程:先跳过第一个双引号前的所有内容,再读取到下一个双引号之前的内容作为名字,需要引入<limits>头文件处理流忽略逻辑。
代码示例如下:

#include <limits> // 引入numeric_limits所需头文件
// 其他原有头文件保留
#include <iostream>
#include <string>
using namespace std;

// ... 你的其他代码
if (command == "insert")
{
    int ID = 0;
    string Name;
    // 跳过所有字符直到遇到第一个双引号,同时把这个双引号丢弃
    cin.ignore(numeric_limits<streamsize>::max(), '"');
    // 读取所有字符直到遇到下一个双引号,内容存入Name,双引号自动丢弃
    getline(cin, Name, '"');
    cin >> ID;
    root = insertInfo(root, Name, ID);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:57:01