忽略向量C ++中的空格

时间:2017-10-28 10:49:28

标签: c++ vector

我试图在C ++中使用vector分割单个单词中的字符串。所以我想知道如果用户在字符串中的单词之间放置多个空格,如何忽略向量中的空格。

我该怎么做?

scnview

5 个答案:

答案 0 :(得分:2)

四件事:

  1. 使用重载的>>运算符将流中的输入读入astring时,它会自动在空白处分隔。即它读取"单词"。

  2. 存在一个使用字符串作为输入的输入流std::istringstream

  3. 您可以将迭代器与流一起使用,例如: std::istream_iterator

  4. std::vector有一个constructor接受一对迭代器。

  5. 这意味着您的代码可能只是

    std::string line;
    std::getline(std::cin, line);
    
    std::istringstream istr(line);
    
    std::vector<std::string> words(std::istream_iterator<std::string>(istr),
                                   std::istream_iterator<std::string>());
    

    在此之后,向量words将包含所有&#34;单词&#34;从输入行。

    您可以轻松打印&#34;字&#34;使用std::ostream_iteratorstd::copy

    std::copy(begin(words), end(words),
              std::ostream_iterator<std::string>(std::cout, "\n"));
    

答案 1 :(得分:1)

最简单的方法是使用std::istringstream,如下所示:

std::string sentence;
std::getline(std::cin,sentence);
std::istringstream iss(sentence);
std::vector<std::string> my;
std::string word;
while(iss >> word) {
    my.push_back(word);
}

任何空格都将被忽略并自动跳过。

答案 2 :(得分:1)

您可以使用跳过空格的std::istream_iterator直接创建矢量:

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

int main() {
    std::string str = "Hello World  Lorem Ipsum  The    Quick Brown Fox";
    std::istringstream iss(str);
    std::vector<std::string> vec {std::istream_iterator<std::string>(iss),
        std::istream_iterator<std::string>() };
    for (const auto& el : vec) {
        std::cout << el << '\n';
    }
}

答案 3 :(得分:0)

这是一个将给定句子分成单词的函数。

#include <string>
#include <vector>
#include <sstream>
#include <utility>

std::vector<std::string> divideSentence(const std::string& sentence) {
    std::stringstream stream(sentence);
    std::vector<std::string> words;
    std::string word;
    while(stream >> word) {
        words.push_back(std::move(word));
    }
    return words;
}

答案 4 :(得分:-1)

减少字符串中的double,triple等空格是一个又一次遇到的问题。我总是使用以下非常简单的算法:

伪代码:

while "  " in string:
    string.replace("  ", " ")

在while循环之后,你知道你的字符串只有一个空格,因为多个连续的空格被压缩成单个。

大多数语言允许您在字符串中搜索子字符串,并且大多数语言都能够运行string.replace(),因此这是一个有用的技巧。