C++ 如何生成存储在向量中的字符串数组
我正在尝试这样的事情:C++ 如何生成存储在向量中的字符串数组,c++,C++,我正在尝试这样的事情: #include <iostream> #include <vector> #include <cstring> using namespace std; int main() { string inputStr; vector <string> strVector; cin.getline(inputStr,200); int i=0; while (inputStr!=NUL
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
int main()
{
string inputStr;
vector <string> strVector;
cin.getline(inputStr,200);
int i=0;
while (inputStr!=NULL){ //unless all data is read.
strVector[i]=getline(inputStr," ");
i++;
}//while.
for (int j=0; j<strVector.size(); j++){
cout<< strVector[j];
cout<<endl;
}
} //main.
#包括
#包括
#包括
使用名称空间std;
int main()
{
字符串输入str;
向量向量向量机;
cin.getline(inputStr,200);
int i=0;
while(inputStr!=NULL){//除非读取了所有数据。
strVector[i]=getline(inputStr,“”);
i++;
}//一会儿。
对于(int j=0;j我想你在寻找std::vector
模板的方法我想你在寻找std::vector
模板的方法很多涉及inputString的代码都是无效的。istream
的getline成员没有接受std::string
,因此这是无效的:
cin.getline(inputStr,200);
strVector[i]=getline(inputStr," ");
您需要的是全局getline:
getline(cin, inputStr);
其次,没有直接从std::string
读取的全局getline,因此这是无效的:
cin.getline(inputStr,200);
strVector[i]=getline(inputStr," ");
您想在那里使用的是一个istringstream
。总之,您的代码可能如下所示:
std::getline(std::cin, inputStr);
std::istringstream iss(inputStr);
std::string word;
// read from the istringstream until failure
while (std::getline(iss,word,' '))
strVector.push_back(word);
如果您想在空白(包括制表符)上划界,则可以使用运算符>>
而不是getline。您的许多涉及inputString的代码是无效的。istream
的getline成员都没有使用std::string
,因此这是无效的:
cin.getline(inputStr,200);
strVector[i]=getline(inputStr," ");
您需要的是全局getline:
getline(cin, inputStr);
其次,没有直接从std::string
读取的全局getline,因此这是无效的:
cin.getline(inputStr,200);
strVector[i]=getline(inputStr," ");
您想在那里使用的是一个istringstream
。总之,您的代码可能如下所示:
std::getline(std::cin, inputStr);
std::istringstream iss(inputStr);
std::string word;
// read from the istringstream until failure
while (std::getline(iss,word,' '))
strVector.push_back(word);
如果要在空格(包括制表符)上划界,则可以使用运算符>>
而不是getline。还有另一种方法:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
vector<string> strVec;
string str;
cout<<"Enter # to quit \n\n";
int i=0;
while (str!="#")
{
cout<<"Input text No. "<<i+1 <<" here > ";
cin>>str ;
strVec.push_back(str);
i++;
}
cout<<"\nStored text\n----------\n";
for (int j=0; j<strVec.size()-1; j++) cout<<j+1<<" "<< strVec[j]<<"\n";
cout<<"\n\n";
return(0);
}
#包括
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
向量strVec;
字符串str;
cout还有另一种方法:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
vector<string> strVec;
string str;
cout<<"Enter # to quit \n\n";
int i=0;
while (str!="#")
{
cout<<"Input text No. "<<i+1 <<" here > ";
cin>>str ;
strVec.push_back(str);
i++;
}
cout<<"\nStored text\n----------\n";
for (int j=0; j<strVec.size()-1; j++) cout<<j+1<<" "<< strVec[j]<<"\n";
cout<<"\n\n";
return(0);
}
#包括
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[])
{
向量strVec;
字符串str;
请尝试使用push_back
方法:strVector.push_back(getline(inputStr,”);
对…您的语法对std::map有效,但对std::vector无效。使用push_back。我可以问一个显然不太明显的问题吗?getline(inputStr,”)是什么
doing?如果您只想从cin
加载带有空格分隔字符串的向量,有更简单的方法。尝试使用push_back
方法:strVector.push_back(getline(inputStr,”))
对……您的语法对std::map有效,但对std::vector无效。请使用push_back。我可以问一个显然不太明显的问题吗?什么是getline(inputStr,”)
做什么?如果你想简单地从cin
加载一个带有空格分隔字符串的向量,有更简单的方法。+1和/或istream\u迭代器iss
和back\u inserter
将字符串推到strVector中。@Benjamin Lindley.你能用注释解释一下你的想法吗ng在istringstream的第二行要做什么。@AzkaAhmad:我会的,但我现在必须离开。看一看。或者其他人会解释。@AzkaAhmad这是从(cin)读取的完整行,然后将其加载到stringstream中,以将空格分隔的内容提取到单个字符串中,然后将这些字符串推送到向量中。我希望这是有意义的。这样,您就可以在一行中键入多个单词,按enter键,然后将这些单词拆分为单个字符串并收集到向量中。@WhozCraig我需要添加一个库吗因为在PUTTY中我得到了这个错误“variable–std::istringstream iss–有初始值设定项,但类型不完整”+1和/或一个istream\u迭代器iss
和一个back\u inserter
将字符串塞进strVector。@Benjamin Lindley.你能用注释解释一下你在第二行使用istringstream时想做什么吗。@AzkaAhmad:我会的,但我现在必须离开。看看。或者其他人会解释。@AzkaAhmad这是从(cin)读取的完整行,然后将其加载到stringstream中,以将空格分隔的内容提取到单个字符串中,然后将这些字符串推送到向量中。我希望这是有意义的。这样,您就可以在一行中键入多个单词,按enter键,然后将这些单词拆分为单个字符串并收集到向量中。@WhozCraig我需要添加一个库吗因为在PUTTY中我得到了这个错误“variable–std::istringstream iss–有初始值设定项,但类型不完整”