如何在 c++ 中使用向量将整行作为输入

How to take a whole line as input using vector in c++?

本文关键字:输入 向量 c++      更新时间:2023-10-16

**示例:-动物(爬行动物鸟类(鹰鸽乌鸦))作为输入?

我没有得到这个输入的答案 动物 ( 爬行动物 鸟类 ( 鹰 鸽子 乌鸦 ) )

#include<vector>
#include<string>
#define ll long long 
#include <iostream>
using namespace std;
int main() 
{
ll n,m,k,cb=0,ob=0;
cin>>n;
string c;
vector<string> s;
while(cb!=ob)
{
    cin>>c;
    if(c=="(")
    ob++;
    else if(c==")")
    cb++;
    s.push_back(c);
}
for(ll i=0;i<s.size();i++)
cout<<s[i];
return 0;
}

第一个问题是你读到的第一件事是long long值。 Animal不是。

您正在检查while(cb!=ob)cbob 上面的某些行都使用 0 初始化。所以你的循环永远不会运行。

即使您修复了循环,下一个问题也将是您的输入不是以(开头。因此,在阅读Animal后,您的循环将退出。

第三个问题是你的输出。完成后,您不会冲洗cout。另外:你为什么使用long long进行istd::vector::size()返回size_t .所以请坚持下去。

一个"简单"的解决方案是这样的:

#include<vector>
#include<string>
#include <iostream>
using namespace std;
int main()
{
    int cb = 0, ob = 0;
    string c;
    vector<string> s;
    while((ob==cb && ob==0) || ob!=cb)
    {
        cin >> c;
        if (c == "(")
            ob++;
        else if (c == ")")
            cb++;
        s.push_back(c);
    }
    for (size_t i = 0; i < s.size(); i++)
    {
        cout << s[i];
    }
    cout << endl;
    return 0;
}

另一件事:如果括号不匹配(无限循环或过早中断)并且不会处理最后一个右括号后面的文本,则此代码将不起作用。

由于您的问题并没有真正具体说明您想要什么,我的答案只是向您展示主要问题。

我还建议您检查输入流是否存在错误。