如何使用将字符串拆分为 for 循环中的变量的程序

How to use a program that splits a string as a variable in a for loop

本文关键字:循环 变量 程序 for 何使用 字符串 拆分      更新时间:2023-10-16

这是一个问题:是否可以使用拆分字符串的程序,以便该程序的值用作for循环中的变量。

这是拆分字符串的程序:

#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
#include <vector>
#include <sstream>
template <class Container>
void f(const std::string& str, Container& cont)
{
std::istringstream iss(str);
std::copy(std::istream_iterator<std::string>(iss),
std::istream_iterator<std::string>(),
std::back_inserter(cont));
}

int main()
{
char str[] = "The quick brown fox jumps over the lazy dog";
std::vector<std::string> words;
split1(str, words);
std::copy(words.begin(), words.end(),
std::ostream_iterator<std::string>(std::cout, " "));
}

然后,在 main(( 程序中,我想编写一个 for 循环,该循环迭代从拆分字符串的程序返回的值,并打印其中的项目。类似这个:


int main() {
#some statements
//var1 should be the value returned from the program that splits the string
for (int i = 0 ; i<=strlen(var1); i++) {
cout << var1[i]; }
}

我在想,也许拆分字符串的整个程序可以变成一个函数;然后可以将该函数的调用分配给变量var1;这意味着var1应该是一个字符串或一个char数组,这在某种程度上与在这种情况下使用的函数类型相冲突。

是否可以使用 C++ 语法执行此类操作? 我最近开始使用C++,有些事情看起来很复杂。

谢谢!

我想澄清这个问题的答案,因为通常适用于字符串或字符数组的迭代形式不能在这里使用。

我通过在 std::vector 上使用带有索引的迭代来修复代码。

#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
#include <vector>
#include <sstream>
#include <cstring>
using namespace std;
template <class Container>
void split1(const std::string& str, Container& cont)
{
std::istringstream iss(str);
std::copy(std::istream_iterator<std::string>(iss),
std::istream_iterator<std::string>(),
std::back_inserter(cont));
}

int main()
{
char str[] = "The quick brown fox jumps over the lazy dog";
std::vector<std::string> words;
split1(str, words);
std::copy(words.begin(), words.end(),
std::ostream_iterator<std::string>(std::cout, " "));
cout << "n";
for (std::vector<int>::size_type i = 0; i != words.size(); i++){
cout << words[i] << " "; }
}

执行代码后:

The quick brown fox jumps over the lazy dog                                                                                                   
The quick brown fox jumps over the lazy dog   

函数strlen()和变量var1必须替换为size()和变量words。除此之外,必须替换 for 循环中的条件,以便适合在 std::vector 上进行迭代。