【发布时间】:2026-02-12 05:45:01
【问题描述】:
我阅读了一个包含 "," 分隔词的文本文件。
我逐行阅读这个文件。
取一行后,我使用 split 函数将其拆分为单词。在这里,我使用 ',' 来表示行中的单独单词。
我定义了一个全局向量,所以我认为我可以将所有单词存储在该向量中。
在向量从分割函数中出来之前一切正常。
代码运行良好。但它不会将单词存储在向量中。
在 split 函数的底部你可以看到我写的那行。 cout<<evec.size()<<endl;那一行是逐行检查向量的大小。
如果第一行有 13 个逗号分隔的单词,则显示 13(这意味着它存储了它)
但是一旦您退出拆分功能,该数据就不再可用。我该怎么做才能将所有单词存储在这个向量中?
#include<iostream>
#include<string>
#include<stdio.h>
#include <fstream>
#include <vector>
using namespace std;
std::vector<string> evec;
void split( string st,vector<string> evec){
string z = " ";
for ( char s : st){
if ( s==','){
evec.push_back(z);
z = " ";
}
else{
z = z + s;
}
}
cout<<evec.size()<<endl;
}
int main( ){
string st;
ifstream Myfile("file.txt");
while(getline(Myfile, st))
{
split(st,evec);
}
cout<< evec.size() <<endl;
for (auto& it : evec) {
cout << it << endl;
}
return 0;
}
【问题讨论】:
-
vector<string> evec是原始向量的副本。原始向量没有被修改。学习 C++ 中的参考资料。 -
如果您不知道按值、按指针和按引用传递函数参数的区别,我建议您查阅您最喜欢的 C++ 书籍。或者,您可以查看在线教程中的以下链接:1.Call by Value 2.Call by pointer 3.Call by reference
-
要通过参数访问局部变量,请使用
evec。要访问全局变量,请使用::evec。
标签: c++ visual-c++ c++17