如何在c ++中使用空格进行长字符串输入?

时间:2015-07-28 07:12:27

标签: c++

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    int T;
    cin >> T;
    char input[1000];
    for(int i=0;i<T;i++)
    {
        cin.getline(input,sizeof(input));
        cout << input << "\n";
    }
    return 0;
}

我目前在使用getline获取字符串输入时遇到问题,但它似乎只适用于短行。这是我的输入和输出:

输入:

  

3我现在可以装一个大容器的咖啡吗?   现在的茶容器现在我希望我能记得pi尤里卡   伟大的发明家圣诞布丁圣诞馅饼叫道   问题非常重要

输出:

  

我现在可以装一个大容器的咖啡吗?   现在的容器茶

它没有存储最后一行的原因?

4 个答案:

答案 0 :(得分:3)

您可以使用string代替char []

以这种方式执行此操作
int main() {
    int T;
    cin >> T;
    string input;
    for(int i=0;i<T;i++)
    {
        std::getline(std::cin,input);
        cout << input << endl;
    }
    return 0;
}

使用以下测试检查代码:

输入:

3 Can I have a large container of coffee right now Can I have a large container of tea right now Now I wish I could recollect pi Eureka cried the great inventor Christmas Pudding Christmas Pie Is the problems very center

输出:

3 Can I have a large container of coffee right now Can I have a large container of tea right now Now I wish I could recollect pi Eureka cried the great inventor Christmas Pudding Christmas Pie Is the problems very center

答案 1 :(得分:1)

您的问题是第一个输入操作符:

cin >> T;

这将读取一个数字并将其作为整数存储在T中,但在流中保留换行符。现在循环将读取三行,但第一行将是一个空行。

您可以通过多种方式解决此问题,最简单的方法是在获取数字后丢弃换行符:

cin >> T;
cin.getline(input, sizeof input);

更好的方法是检查文件结尾,而不是提前获取行数。并使用std::string而不是其他人建议的char数组。

答案 2 :(得分:0)

尝试这样的事情

while(cin.getline(input,sizeof(input))){
}

答案 3 :(得分:0)

尝试:

int main() {
    int T;
    cin >> T;
    std::string temp;
    std::string input;
    for(int i=0;i<T;i++)
    {
        while(std::getline(std::cin,temp)) {
        input += temp;
    }
    std::cout << input << endl;
    return 0;
}