C-从文本文件打印特定行

拉斯·纽斯

我是编程新手,所以请保持友好。

当前,我正在尝试编写一个程序来打开一个文本文件,读取两个单词,搜索该文本文件以计算两个单词出现的次数,然后最后打印出第一个单词出现的第一行。

到目前为止,这是我所做的:

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

FILE *infile;
char inputWord1[100], inputWord2[100], filename[100], wordInText[100], line[500]; 
int i, count, strComp, word1Count, word2Count, wordLen, lineCount; 
char c;

int main() { 
    printf("Enter the first word: "); 
    gets(inputWord1); 
    printf("Enter the second word: "); 
    gets(inputWord2); 
    printf("Enter the file name: "); 
    gets(filename); 

    infile = fopen(filename, "r"); 
    if(infile == NULL) { 
        printf("Error"); 
        exit(1); 
    } 

    word1Count = 0; word2Count = 0; lineCount = 1;
    while(fscanf(infile, "%s", wordInText) != EOF) { 
        wordLen = strlen(wordInText);
        for(i = 0; i < wordLen; i++) {
            if(wordInText[i] >= 65 && wordInText[i] <= 90) { 
                wordInText[i] = wordInText[i] + 32; 
            }
        }

        for(c = getc(infile); c != EOF; c = getc(infile)) {
            if(c == '\n') { 
                lineCount = lineCount + 1;
            }
        }

        strComp = strcmp(wordInText, inputWord1); 
        if(strComp == 0) { 
            word1Count++;
            if(word1Count == 1) { 
                for(int x = lineCount; x <= lineCount; x++) {
                    fgets(line, 500, infile); 
                    printf("%s\n", line);
                }
            }
        }
        strComp = strcmp(wordInText, inputWord2); 
        if(strComp == 0) { 
            word2Count++; 
        }
    }
    printf("Word 1 appears %d times\n", word1Count); 
    printf("Word 2 appears %d times\n", word2Count);
}

因此,所有这一切都有效,除了:

strComp = strcmp(wordInText, inputWord1); 
        if(strComp == 0) { 
            word1Count++;
            if(word1Count == 1) { 
                for(int x = lineCount; x <= lineCount; x++) {
                    fgets(line, 500, infile); 
                    printf("%s\n", line);
                }
            }
        }

最后一个for循环无法正常工作。它打印出\ n,但不打印该行。我真的不知道为什么它不起作用。所有其他部分都工作正常。

如果有人对如何解决这个问题有任何想法,我将不胜感激。请记住,我只知道基本的C函数,并且我还没有完全完成该程序(仍然需要将输入的单词转换为小写)。

Ôrel

应该替换gets以避免缓冲区溢出,我使用了一些define,当我们找到输入行是dup并在最后打印时。文件逐行读取,每一行逐字拆分。解析应进行更新,例如允许有多个空格,支持更多的单词分隔符等。

#include <stdio.h>                                                             
#include <string.h>                                                            
#include <stdlib.h>                                                            
#include <ctype.h>                                                             

#define WORD_LEN_MAX 100                                                       
#define LINE_LEN_MAX 500                                                       

int main() {                                                                   
    FILE *infile;                                                              
    char inputWord1[WORD_LEN_MAX], inputWord2[WORD_LEN_MAX];                   
    char filename[WORD_LEN_MAX];                                               
    char wordInText[WORD_LEN_MAX], line[LINE_LEN_MAX];                         
    char firsAppear[LINE_LEN_MAX];                                             
    int word1Count, word2Count, lineCount, i;                                  
    printf("Enter the first word: ");                                          
    gets(inputWord1);                                                          
    printf("Enter the second word: ");                                         
    gets(inputWord2);                                                          
    printf("Enter the file name: ");                                           
    gets(filename);                                                            


    infile = fopen(filename, "r");                                             
    if(infile == NULL) {                                                       
        printf("Error cannot open %s", filename);                              
        exit(1);                                                               
    }                                                                          

    word1Count = 0; word2Count = 0; lineCount = 1;                             
    while(fgets(line, sizeof(line), infile) != NULL) {                         
        char *p = line;                                                        
        lineCount++;                                                           
        while (*p != '\0' && *p != '\n') {                                     
            i = 0;                                                             
            while (*p != ' ' && *p != '\0' && *p != '\n') {                    
                wordInText[i++] = tolower(*p++);                               
            }                                                                  
            if (*p == ' ') {                                                   
                p++;                                                           
            }                                                                  
            wordInText[i] = '\0';                                              

            if(!strcmp(wordInText, inputWord1)) {                              
                word1Count++;                                                  
                if(word1Count == 1) {                                          
                    strncpy(firsAppear, line, sizeof(firsAppear));             

                }                                                              
            }                                                                  
            if(!strcmp(wordInText, inputWord2)) {                              
                word2Count++;                                                  
            }                                                                  
        }                                                                      
    }                                                                          
    printf("Word 1 appears %d times\n", word1Count);                           
    printf("Word 2 appears %d times\n", word2Count);                           
    printf("%s", firsAppear);                                                  
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C编程-从文本文件读取特定行

来自分类Dev

C编程读取文本文件的特定行

来自分类Dev

C编程-从文本文件读取特定行

来自分类Dev

读取文本文件的特定行 [C#]

来自分类Dev

C ++文本文件打印

来自分类Dev

如何从文本文件中打印随机行但排除包含某些字符的行?C#

来自分类Dev

如何在文本文件的特定行中更新特定值C#

来自分类Dev

如何使用C#打印文本文件

来自分类Dev

从文本文件打印输出C ++

来自分类Dev

从巨大的文本文件(c#4.0)中读取特定行

来自分类Dev

如何在C ++中删除文本文件中的特定行

来自分类Dev

如何在C ++中将文本文件的特定行读入int类型的数组中?

来自分类Dev

如何在C ++中将文本文件的特定行读入int类型的数组中?

来自分类Dev

C:在不搜索的情况下写入文本文件中的特定行

来自分类Dev

c#在特定的行号处将行写入文本文件

来自分类Dev

如何在c#中解析文本文件中的特定行

来自分类Dev

C ++ Qt-读取文本文件的特定部分

来自分类Dev

C# 解析特定格式的文本文件

来自分类Dev

在文本文件中访问最后6行C ++

来自分类Dev

从C中的文本文件读取前N行

来自分类Dev

在文本文件中访问最后6行C ++

来自分类Dev

从文本文件读取行到结构C

来自分类Dev

读取文本文件并将其内容打印到C语言的屏幕上

来自分类Dev

C ++读取文本文件,存储对象并打印出数组

来自分类Dev

读取文本文件并将其内容打印到C语言的屏幕上

来自分类Dev

C#读取文本文件并打印到表格中

来自分类Dev

c ++命令行参数不从文本文件中打印出值

来自分类Dev

使用c从计算机读取和打印文本文件

来自分类Dev

使用perl从文本文件中打印特定行

Related 相关文章

热门标签

归档