c/c++语言开发共享查找文本文件中每行的行大小

如何计算每行中的字符数或数字? 是否有类似EOF的东西更像是一条线?

    您可以遍历行中的每个字符并继续递增计数器,直到遇到行尾( 'n' )。 确保以文本模式( "r" )而不是二进制模式( "rb" )打开文件。 否则,流不会自动将不同平台的行结束序列转换为'n'字符。

    这是一个例子:

     int charcount( FILE *const fin ) { int c, count; count = 0; for( ;; ) { c = fgetc( fin ); if( c == EOF || c == 'n' ) break; ++count; } return count; } 

    这是一个测试上述function的示例程序:

     #include  int main( int argc, char **argv ) { FILE *fin; fin = fopen( "test.txt", "r" ); if( fin == NULL ) return 1; printf( "Character count: %d.n", charcount( fin ) ); fclose( fin ); return 0; } 

    关于逐行读取文件,请查看fgets 。

     char *fgets(char *restrict s, int n, FILE *restrict stream); 

    fgets()函数必须从流中读取字节到s指向的数组,直到读取n-1个字节,或者读取a并将其传送到s,或者遇到文件结束条件。 然后以空字节终止该字符串。

    这里唯一的问题可能是您无法保证文件中的最大行大小。 如果是这种情况,您可以迭代字符,直到看到换行符。

    关于行尾:

    简短回答: n是换行符(也称为换行符)。

    维基百科的答案很长:

    基于ASCII或兼容字符集的系统分别使用LF(换行,0x0A,十进制10)或CR(回车,0x0D,十进制13)或CR后跟LF(CR + LF,0x0D 0x0A); 请参阅下面的CR + LF惯例的历史原因。 这些字符基于打印机命令:换行符表示一行纸张应从打印机送出,并且回车符指示打印机托架应返回到当前行的开头。

     * LF: Multics, Unix and Unix-like systems (GNU/Linux, AIX, Xenix, Mac OS X, FreeBSD, etc.), BeOS, Amiga, RISC OS, and others * CR+LF: DEC RT-11 and most other early non-Unix, non-IBM OSes, CP/M, MP/M, DOS, OS/2, Microsoft Windows, Symbian OS * CR: Commodore 8-bit machines, Apple II family, Mac OS up to version 9 and OS-9 

    但由于您不太可能使用仅使用回车的表示,因此寻找换行应该没问题。

    n是C中的换行符。在其他语言中,例如C#,您可以使用类似C#的Environment.EndLine来克服平台难题。

    如果您已经知道您的字符串是一行(让我们称之为行),请使用strlen(line)来获取其中的字符数。 如果以'n'结尾,则减去1。

    如果字符串中包含新行字符,则需要将其拆分为新行字符,然后在每个子字符串上调用strlen()

    如果以文本模式打开文件,即fopen()的第二个参数中没有b ,则可以逐个读取字符,直到找到'n'来确定行大小。 底层系统应该注意将行尾终止符转换为只有一个字符'n' 。 在某些系统上,文本文件的最后一行可能不以'n'结尾,因此这是一种特殊情况。

    伪代码:

     count := 0 c := next() while c != EOF and c != 'n'" count := count + 1 

    以上将计算给定行中的字符数。 next()是一个从文件中返回下一个字符的函数。

    或者,您可以将fgets()与缓冲区一起使用:

     char buf[SIZE]; count = 0; while (fgets(buf, sizeof buf, fp) != NULL) { /* see if the string represented by buf has a 'n' in it, if yes, add the index of that 'n' to count, and that's the number of characters on that line, which you can return to the caller. If not, add sizeof buf - 1 to count */ } /* If count is non-zero here, the last line ended without a newline */ 

      以上就是c/c++开发分享查找文本文件中每行的行大小相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/562696.html

      (0)
      上一篇 2021年2月5日
      下一篇 2021年2月5日

      精彩推荐