C++ 用空格分割一个字符串,除非它被引号括起来并存储在一个 vector 中

标签 c++ string c++11 vector split

<分区>

我有一个接受用户输入的提示。我想接受这个用户输入并将每个单词存储在一个 vector 中,用空格分隔,除非引号之间包含一组单词,在这种情况下,我希望这些部分中的所有术语都算作 1。

例如,如果用户输入以下内容:

12345 Hello World "This is a group"

然后我希望 vector 存储以下内容:

vector[0] = 12345
vector[1] = Hello
vector[3] = World
vector[4] = "This is a group"

我有以下代码,它将用户输入按空格拆分并将其存储在一个 vector 中,但我无法弄清楚如何使引号内的所有文本都算作一个。

 string userInput

 cout << "Enter a string: ";
 getline(cin, userInput);

string buf; 
stringstream ss(userInput); 

vector<string> input;

while (ss >> buf){
    input.push_back(buf);

我想在用户输入段落的单词周围保留引号。我还想将结果保存到 vector 而不是将字符输出到屏幕。

最佳答案

C++14 内置:http://en.cppreference.com/w/cpp/io/manip/quoted

Live On Coliru

#include <string>
#include <vector>
#include <sstream>
#include <iostream>
#include <iomanip>

int main(void) {
    std::istringstream iss("12345 Hello World \"This is a group\"");
    std::vector<std::string> v;
    std::string s;

    while (iss >> std::quoted(s)) {
        v.push_back(s);
    }

    for(auto& str: v)
        std::cout << str << std::endl;
}

打印

12345
Hello
World
This is a group

关于C++ 用空格分割一个字符串,除非它被引号括起来并存储在一个 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46535176/

相关文章:

c++ - 右值引用 : Why aren't rvalues implicitly moved?

c++ - 实际输入到FFT,然后iFFT返回到一维数组中的实际数据

c++ - const char& 作为函数的参数

java - Switch 设置为 int 参数。创建默认情况以排除字符串,这样就不会读取错误

string - VBA 字符串的某些部分

c++ - 如何将字符串转换为常量整数?

c++ - 如何减少使用std::condition_variable时生产者获得锁而消费者无法获得锁的可能性?

c++ - 制作一个不断变化的随机整数?

python - 如何为每个大写字母分配一个数值?

c++ - 如果线程涉及互斥锁定和解锁之间的循环,则在 C++ 中的 2 个线程之间切换执行