如何编写 C++ 代码,该代码接受 n 个字符串并将它们存储在字符串向量中,然后打印它 [重复]

How to write C++ code that takes n strings and stores them inside a vector of strings and later prints it [duplicate]

提问人:user22643044 提问时间:9/27/2023 最后编辑:Abrauser22643044 更新时间:9/29/2023 访问量:80

问:

如何编写接受n个字符串(之间可以有空格)的C++代码并将它们存储在字符串向量中,然后打印它? (将字符串放在向量中是必要的。

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin >> n;
    vector<string> v;
    for (int i = 0; i < n; i++)
    {
        string s;
        getline(cin, s);
        v.push_back(s);
    }
    for (int i = 0; i < n; i++)
    {
        cout << v[i] << endl;
    }
}

这是我的代码。它只取字符串而不是取字符串。然后打印一个新行,然后打印字符串。n - 1nn - 1

C++ getline

评论

1赞 Eljay 9/27/2023
如何编写 C++ 代码...首先,永远不要这样做。其次,永远不要这样做。#include <bits/stdc++.h>using namespace std;

答:

4赞 Jakob Guldberg Aaes 9/27/2023 #1

解释

我看到您遇到的问题。它与 和 之间的交互有关。使用 to read 后,它会捕获数字,但不会从输入缓冲区中删除换行符。这会导致后续读取空字符串。要绕过此问题,最好在读取后立即清除输入缓冲区。cingetlinecinngetlinen

法典

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

int main()
{
    int n;
    std::cin >> n;
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');  // Clearing the input buffer

    std::vector<std::string> v;
    for (int i = 0; i < n; i++)
    {
        std::string s;
        std::getline(std::cin, s);
        v.push_back(s);
    }

    for (int i = 0; i < n; i++)
    {
        std::cout << v[i] << '\n';
    }
}

这应该可以解决问题。

评论

1赞 Jakob Guldberg Aaes 9/28/2023
随意编辑答案^____^
1赞 JW Yap 9/27/2023 #2

解释

如果您在 之后立即调用,您将只得到一个换行符。 为避免此问题,您需要先使用换行符。 您可以通过在 for 循环之前添加它来做到这一点。getline()cin >> n;

法典

cin.ignore();