如何获取每行中的字符数?

Posted

技术标签:

【中文标题】如何获取每行中的字符数?【英文标题】:How do I get number of characters in each line? 【发布时间】:2019-05-23 21:38:01 【问题描述】:

我需要获取每行中的字符数,然后将其粘贴到另一个文件(学校项目)中,但即使我的原型已经无法工作。

当我将它粘贴到另一个文件时,我已经尝试继续查看问题是否自行解决,但它没有工作,所以我回到了这个。

int main()

    FILE *fw;
    FILE *fr;
    int i = 0;
    char c;
    fr = fopen("vstup.txt","r");
    fw = fopen("vystup.txt","w");
    while ((c = getc(fr)) != EOF)
    
        while ((c = getc(fr)) != '\n')
        
            i++;
        
        printf("%d\n", i);
    

【问题讨论】:

究竟是什么不适合您?顺便说一句,您正在跳过每行中的第一个字符。 你没有把计数器归零... char c 应该是int c 也许看看this post 和 cmets 中的链接。 Comparing unsigned char and EOF的可能重复 【参考方案1】:

c 必须声明为 int,而不是 charEOF 可能不是有效的 char 值,因此不等式可能永远存在。

您不应两次致电getc()。您永远不会检查第一次调用的结果是否是换行符。

您需要在读取换行符后将i 设置回0,否则您将继续将下一行的长度添加到上一行。

您应该只在读取换行符时打印长度,而不是每次通过循环。如果最后一行不以换行符结尾,则应在循环后打印其长度;如果完成后i 不是0,您就可以知道发生了这种情况。

由于长度应该写入另一个文件,你应该使用fprintf()

while ((c=getc(fr)) != EOF) 
    if (c == '\n') 
        printf("%d\n", i);
        i = 0;
     else 
        i++;
    

if (i != 0) 
    fprintf(fw, "%d\n", i);

【讨论】:

【参考方案2】:

您不需要嵌套循环。无论哪种方式,您都需要将计数器归零,因此您不妨只使用if 而不是一段时间:

int main()

    FILE *fw, *fr;
    int count = 0;
    int c;

    fr = fopen("vstup.txt","r");
    fw = fopen("vystup.txt","w");

    while ((c = getc(fr)) != EOF) 
        count++;
        if(c == '\n') 
            fprintf(fw, "%d\n", count);
            count = 0;
        
    

    fclose(fr);
    fclose(fw);

此版本会将换行符视为有效字符。

注意c 必须是int,而不是char,这样它就可以保存getcEOF 返回的每个字符值,这不是字符值。

别忘了关闭你的文件!

【讨论】:

@Eric。那确实好多了,所以我无耻地窃取了你的建议。 不是偷的;它是免费提供的。教别人改进答案比我自己写所有东西做得更多。 @Eric。谢谢你。大多数时候我都有同样的感觉。

以上是关于如何获取每行中的字符数?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 std::string 中的字符数?

awk 如何获取每行最后一个字符

如何打印文本文件每行的字符数

如何在我的进程绑定到的控制台中获取行中的字符数?

(java)如何获取字符串的字节数!

java如何获取字符串的字节数