C++ 当用户输入';输入';钥匙

C++ 当用户输入';输入';钥匙,c++,string,vector,segmentation-fault,C++,String,Vector,Segmentation Fault,我一直在编写一个程序,从用户那里获取两种不同的“向量”输入,当按下enter键时停止输入。代码如下所示 #include <iostream> #include <vector> #include <string> using namespace std; int main() { vector<string> a,c; string b; int m=0;//,words = 0; do {

我一直在编写一个程序,从用户那里获取两种不同的“向量”输入,当按下enter键时停止输入。代码如下所示

 #include <iostream>
 #include <vector>
 #include <string>

using namespace std;

int main()
{
    vector<string> a,c;
    string b;
    int m=0;//,words = 0;
    do
    {
        cin>>a[m];
        m++;
    }
    while(cin.get()!= '\n');

    int n=0;
    do
    {
        cin>>c[n];
        n++;
    }
    while(cin.get() != '\n');

    int mida=a.size()/2, midc=c.size()/2;
    int count;
    int i,j;

    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            {
                if(a[i] == c[j])
                count++;
            }

    if(count >= mida  || count >= midc)
        cout<<"similar"<<endl;
    else
        cout<<"dissimilar"<<endl;
    return 0;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
载体a,c;
b串;
int m=0;/,words=0;
做
{
cin>>a[m];
m++;
}
而(cin.get()!='\n');
int n=0;
做
{
c[n];
n++;
}
而(cin.get()!='\n');
int mida=a.size()/2,midc=c.size()/2;
整数计数;
int i,j;
对于(i=0;i=midc)
cout当您创建一个对象时,它一开始是空的,它的
大小将为零,其中的所有索引都将超出范围,并导致未定义的行为(以及可能的崩溃)

您可以使用将元素附加到向量

std::string s;
std::cin >> s;
a.push_back(s);

虽然以上是导致崩溃的最可能原因,但这并不是你唯一的问题。另一个问题是,每个输入字符串都可能以换行符结尾。如果你想读一整行,然后将其拆分为“单词”,那么我建议你使用阅读整行,然后使用从该行中提取单独的单词

您还可以使用轻松地将字符串从输入流转换为向量

你可以这样做

std::string line;
std::getline(std::cin, line);
std::istringstream iss(line);

a = std::vector<std::string>(std::istream_iterator<std::string>(iss),
                std::string>(std::istream_iterator<std::string>());
std::字符串行;
std::getline(std::cin,line);
标准::istringstream iss(线);
a=标准::向量(标准::istream_迭代器(iss),
std::string>(std::istream_迭代器());

cin>>a[m];

您正在索引向量
a
的末尾。由于该向量尚未给定大小,因此它甚至没有空间可分配
a[0]

一种可能的解决方法是使用临时变量获取用户输入,然后
A.push_back[input]

Try(not.)。最后同上