0

我正在自己学习 c,实际上我正在尝试编写一个程序来计算文件中 TAb 的数量,如果一行有一个制表符,我想打印整行以及这一行中制表符的数量。如果它不是更难,我希望你帮我做到这一点,如果一行有超过 80 个字符,打印这一行和我有这个主要功能的字符数:

include <stdio.h> /* printf */

/* Prototype from tablen.c */
void tablen(const char *filename);

int main(int argc, char **argv)
{
  if (argc < 2)
  {
    printf("Usage: tablen filename\n");
    printf("where: filename - file to process.\n");
    return -1;
  }

  tablen(argv[1]);

  return 0;
}

这个主要功能是非常基本的,所以我希望那里没有错误。还有这个功能:

include <stdio.h>  /* FILE, fopen, feof, fgets, fclose   */
include <string.h> /*  strlen */ 

void tablen(const char *filename)
{

    /*Variables*/   
    int i; /*loop controller */
    int tabs = 0; /*number of tabs*/
    int line = 0; /*current line*/
    int size_string; /*size of the string*/

    File *file; /* open and read the file */


    file = fopen(filename, "rt"); /*open the file for read text*/
    size_string = strlen(filename);

    /*if we can read the file*/
    if(file)
    {
        /*while we don't reach the end of file, we still reading*/
        while (!feof(file))
        {
            for(i = 0; i < size_string; i++)
            {
                if(filename[i] == 9) /*ASCII value of TAB is 9 or '\'*/
                {
                    tabs++;
                }           

                if(tabs > 0)
                {
                    printf("# %i: (tabs: %i) |", line, tabs);
                }
                if(filename[i] == '\n')
                {
                    line++;                 
                    tabs = 0;
                }


            }
        }
    }
}

我已经写了这个伪代码,我认为它是正确的计数标签:首先打开一个文件以读取/文本,而文件中有更多行(并逐一读取)我们计算标签的数量,如果我们发现带有标签的一行,打印该行和标签的数量当然我们关闭文件

用于检查线长

首先打开一个文件进行读取/文本,如果文件中有更多行,我们会计算每行的长度。如果该行超过 80 个字符,我们会打印该行的长度信息

我不知道我的方法是否正确,因为这是我第一次尝试处理文件

4

1 回答 1

1

要一次计算一行中的选项卡数,最好使用 getline() 函数。getline() 从文件流中读取一行并返回读取行中的字符数。阅读 getline() 的手册页以获取更多信息。

您可以查看以下代码以解决您的问题

#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
    FILE * fp;
    char * line = NULL;
    size_t len = 0;
    ssize_t read;
    int tabs=0,totaltabs=0,i;
        fp = fopen(argv[1], "r");
        if (fp == NULL)
           exit(EXIT_FAILURE);
        while ((read = getline(&line, &len, fp)) != -1) {
              printf("Retrieved line of length %d\n", read);
        for(i=0;i<read;i++){
            if(line[i] == '\t')
            tabs++; 
        }
        if(tabs){
                    printf("line = %s\nNumber of tabs = %d\n",line,tabs);
            totaltabs = totaltabs+tabs;
            tabs=0;
           }
        if(read >=80)
            printf("%s\n",line);
    }       
           if (line)
               free(line);
           exit(EXIT_SUCCESS);

}
于 2012-12-18T09:12:57.053 回答