在 cpp 中的双引号之间存储子字符串

Store substring between double quotes in cpp

我正在实现 ALV 树,我需要从命令行读取输入。

命令示例如下:

插入“NAME_ANYTHING_IN_QUOTES_$”ID

其中NAME_ANYTHING_IN_QUOTES_$是存储在AVL树中的数据,ID用于决定信息是否存储在左子树或右子树中子树。

代码片段如下:

if (comand == "insert")
{
    int ID = 0;
    string Name;
    cin >> Name;
    cin >> ID;
    root = insertInfo(root, Name, ID);
}

我不知道如何扫描两个双引号之间的子字符串。

谢谢。

使用std::quoted:

std::string name;
std::cin >> std::quoted(name);

我只是在上面添加 HolyBlackCat 的回答。
这是有效的代码:

#include <iostream>
#include <iomanip>

using namespace std;


int main(int argc, const char** argv)
{
    //if (comand == "insert")
    {
        int ID = 0;
        string Name;
        cin >> std::quoted(Name);
        cin >> ID;
        cout << "name is " << Name << " and ID is " << ID << endl;  
        //root = insertInfo(root, Name, ID);
    }

}

当输入为“MyName_$”时 34
我得到
名字是 MyName_$,ID 是 34
所以,HolyBlackCat 的解决方案有效。向我们展示您的代码和输入。

转念一想,那些奇怪的左大括号和右大括号可能取决于字体等。std::quoted 应该对你有用,但你说它不起作用。让我们知道您使用的环境和编译器。如果您确定它们始终存在,您可以删除该字符串中的第一个和最后一个字符,如:

#include <iostream>
#include <string>

using namespace std;


int main(int argc, const char** argv)
{
    
    //if (comand == "insert")
    {
        int ID = 0;
        string Name;
        
        cin >> Name;

        Name.erase(0, 1);
        Name.erase(Name.length() - 1, 1);
                
        cin >> ID;

        cout << "name is " << Name << " and ID is " << ID << endl;
        
        //root = insertInfo(root, Name, ID);
    }

}

我找到了答案....

string name,ID,concat;

getline(cin, concat);

for(int i =0; i< concat.length();i++){

    if(!isdigit(concat[i])&& concat[i] != 34){
        name += concat[i];
    }
    if(isdigit(concat[i])){
        ID += concat[i];
    }
}

cout<<"name is ->"<<name<<endl;

cout<<"ID is ->"<<ID<<endl;