【问题标题】:How to read n sentences after inputting n (solved) (C++)输入n后如何读n个句子(已解决)(C++)
【发布时间】:2022-01-07 11:53:08
【问题描述】:

我需要输入n,一个整数,这是我之后需要输入的句子数,用enter分隔,每个句子都换行。

然后我需要输出单词最多的句子。

当我运行以下程序时,我只能读取 n 然后程序终止。

编辑 1: 我在cin >> n 之后放了一个cin.ignore(),它解决了这个问题,但是现在当我输出text2 时,它只显示它应该显示的句子的第一个单词。

编辑 2: 我在拆分句子之前将text 复制到aux,然后在if() 中我将aux 复制到text2

#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;

//ifstream fin("X.TXT");
/**
ifstream gin("Y.TXT");
**/
//ofstream fout("BAC.TXT");

int main()
{
    int n, i, cnt1=0, cnt2=0;
    char text[256], text2[256]="";
    char *p;
    cin >> n;
    cin.ignore;
    for(i=0; i<n; i++)
    {
        cnt1 = 0;
        cin.get(text, 256);
        p = strtok(text, " ");
        while(p != NULL)
        {
            cnt1++;
            p = strtok(NULL, " ");
        }
        if(cnt1 > cnt2)
        {
            cnt2 = cnt1;
            strcpy(text2, text);
        }
    }
    cout << text2;
    return 0;
}

【问题讨论】:

  • 如果你想通了,你应该在下面发布一个“答案”,然后点击它旁边的复选标记。这会自动将您的问题标记为已解决,无需在标题中添加任何内容。

标签: c++ string word sentence


【解决方案1】:

那是因为cin 也会读取到空格字符,而不仅仅是换行符'\n'。要阅读整个句子,请改用istream&amp; getline(char*, int size, char='\n')。注意分隔符参数默认为换行符,所以可以省略,也可以任意设置。

"终止符(或分隔符)可以是任何字符(如''、'、'或任何特殊字符等)。终止符被读取但不保存到缓冲区中,而是被替换为空字符。” (来源:https://www.geeksforgeeks.org/getline-function-character-array/

#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;

//ifstream fin("X.TXT");
/**
ifstream gin("Y.TXT");
**/
//ofstream fout("BAC.TXT");

int main()
{
    int n, i, cnt1=0, cnt2=0;
    char text[256], text2[256]="";
    char *p;
    cin >> n;
    cin.ignore;
    for(i=0; i<n; i++)
    {
        cnt1 = 0;
        //// Modification ////
        cin.getline(text, 256, '\n');
        //// End of modification ////
        p = strtok(text, " ");
        while(p != NULL)
        {
            cnt1++;
            p = strtok(NULL, " ");
        }
        if(cnt1 > cnt2)
        {
            cnt2 = cnt1;
            strcpy(text2, text);
        }
    }
    cout << text2;
    return 0;
}

【讨论】:

    猜你喜欢
    • 2022-01-02
    • 2022-01-25
    • 2021-12-10
    • 2015-08-24
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多