C++ 如何统计文件中最长行及其包含的字符数

求指教:我的代码如下,但不能实现统计最长行及其字符数的功能,似乎只能判断前两行哪个长

#include "iostream"
using namespace std;
int main()
{
    char c;
    int length=0,maxlength=0,line=0,maxline=0;
    FILE *fp;

    if((fp=fopen("file2.TXT","r"))==NULL)
    {
        cout<<"cannot open";
        exit(1);
    }
    while((c=fgetc(fp))!=EOF)
    {
        if(c=='\n')
        {
            line++;
            if(length>maxlength)
            {
                maxlength=length;
                maxline=line;
            }
            length=0;
        }
        else
            length++;
    }
    cout<<maxline<<"  "<<maxlength<<endl;
    fclose(fp);
    system("pause");
    return 0;
}

#include <iostream>
using namespace std;

int main() {
    char c;
    int length = 0, maxlength = 0, line = 0, maxline = 0;
    FILE *fp;

    if ((fp = fopen("file2.TXT", "r")) == NULL) {
        cout << "cannot open";
        exit(1);
    }

    while ((c = fgetc(fp)) != EOF) {
        if (c == '\n') {
            line++;
            if (length > maxlength) {
                maxlength = length;
                maxline = line;
            }
            length = 0;
        } else {
            length++;
        }
    }

    if (length > maxlength) {
        maxlength = length;
        maxline = line + 1;
    }

    cout << "最长行的行号为: " << maxline << endl;
    cout << "最长行的字符数为: " << maxlength << endl;
    
    fclose(fp);
    system("pause");
    return 0;
}

你用逐行读取的方法
你自己测试的文件有多少行?倒数第二行整成最长的,你输出会是多少?

  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7744337
  • 这篇博客你也可以参考下:C++ 中的模板类声明头文件和实现文件分离后,如何能实现正常编译?
  • 除此之外, 这篇博客: c++中无符号整数回绕机制以及原理解析中的 首先明确一点,在计算机内部,所有的带符号数据都是用补码表示的,那究竟为什么用补码表示呢? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 我们知道:原码的表示方法:最高位作为符号位,不表示数据,0为正,1为负。
    比如 [+1] = [0000 0001] (原码) [-1] = [1000 0001] (原码)

    反码:正数和原码相同,负数:符号位不变,其余数位取反
    [+1] = [0000 0001] (反码) [-1] = [1111 1110] (反码)

    补码:正数和原码相同,负数:符号位不变,其余数位取反+1
    [+1] = [0000 0001] (补码) [-1] = [1111 1111] (补码)

    所以到这里,基本出来了,-1对于带符号型(以8位为例)来说用补码表示自然就是 1111 1111
    对于不带符号整数来说,最高位不表示符号位,故表示255 这也是unsigned回绕机制的原理。说到底,还是计算机底层表示

  • 您还可以看一下 夏曹俊老师的C++ 设计模式原理与实战大全-架构师需备课程课程中的 构建者模式的实用工程技术——代码的坏味道:算法与对象构建的隔离小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    回答:

    该问题的解决方案大致如下: 1. 打开文件 2. 按行读取文件 3. 统计每行字符数,并将其与已知最长的行的字符数进行比较 4. 如果当前行字符数更长,则更新最长行的字符数,保存新的最长行的具体字符内容 5. 重复上述过程,直至读取到文件结尾 6. 关闭文件,输出结果

    C++代码实现如下:(其中包含了对参考资料中提到的类的定义和使用)