[英]How can I copy content from one string vector to another?
例如,我有一个基于字符串的向量:
vector<string> text_vec;
每个字符串中存储了几个单词。 因此,我需要将每个单词从该向量复制到另一个字符串向量,但是我应该将每个词放在单独的字符串中。 我怎样才能做到这一点?
vector<string> text_vec_2;
for(unsigned int i=0;i<text_vec.size();++i){
// assuming a split-function which you have created
// which returns a vector with the individual words
vector<string> words = splitString(text_vec[i]);
// copy the words into the new vector
for(unsigned int j=0;j<words.size();++j){
text_vec_2.push_back(words[j]);
}
}
您的意思是向量内容看起来像这样吗?
{ "word0", "word1 word2 word3", "word4 word5" }
您希望得到这样的结果:
{ "word0", "word1", "word2", "word3", "word4", "word5" }
首先重要的是定义单词的构成 。 我假设一个词是所有内容都至少用一个空格隔开。 实际上,您可能需要处理一些特殊情况,例如:
我们首先定义一个字符串拆分函数,该函数采用std::string
并返回std::vector<std::string>
。 首先将使用上述假设提供简单的拆分; 您可以在以后使它更加复杂:
std::vector<std::string> split(std::string const& input)
{
std::vector<std::string> result;
std::istringstream is(input);
std::string word;
while (is >> word)
{
result.push_back(word);
}
return result;
}
我们拥有此功能,可以将其应用于您的输入向量:
std::vector<std::string> normalise(std::vector<std::string> const& strings)
{
std::vector<std::string> result;
for (auto const& string : strings)
{
auto const tokens = split(string);
for (auto const& token : split(string))
{
result.push_back(token);
}
}
return result;
}
这是完整的测试程序:
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
std::vector<std::string> split(std::string const& input)
{
std::vector<std::string> result;
std::istringstream is(input);
std::string word;
while (is >> word)
{
result.push_back(word);
}
return result;
}
std::vector<std::string> normalise(std::vector<std::string> const& strings)
{
std::vector<std::string> result;
for (auto const& string : strings)
{
auto const tokens = split(string);
for (auto const& token : split(string))
{
result.push_back(token);
}
}
return result;
}
int main()
{
std::vector<std::string> const input = { "word0", "word1 word2 word3", "word4 word5" };
for (auto const& word : normalise(input))
{
std::cout << word << "\n";
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.