C中的#program - 如何读取.txt中的单词和单词行? C程序

时间:2016-06-20 15:33:48

标签: c

我正在尝试使用C编写代码,其中我有一个超过300.000行的文件。所以我想要看一个出现超过1次的特定单词(#P5P5)并读取该单词的相应行。但我的程序只搜索第一个单词并停止...我想循环找到其他单词。

谢谢, 加布里埃拉

所以,我的代码是这样的:

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

int main(int argc, char *argv[])
{
FILE *arquivo = fopen("testando.txt", "r");
char caractere; // caractere a ser lido
int existe_linhas = 0;
int quant_linhas = 0;
int num = 0;

char pesquisa[] = "# 00"; // string a ser pesquisada
int pos = 0; // posicao de início da pesquisa
int encontrei = 0;  // status da pesquisa


if(arquivo != NULL) //verifica se o arq foi aberto ok
{


 while((caractere = fgetc(arquivo)) != EOF)
     {
  // vamos verificar se o caractere atual se iguala ao
  // primeiro caractere da string a ser pesquisada

    existe_linhas = 1; // há conteúdo no arquivo

  if((caractere == pesquisa[0]) && (!encontrei))
    {
    encontrei = 1; // podemos continuar a pesquisa a partir daqui
    pos = 0;
    }

  if(encontrei)
    {
    if(caractere == pesquisa[pos])
      {
      encontrei = 1; // continua a pesquisa
      pos++; // incrementa a posição de busca

      if(pos == strlen(pesquisa))
        break;            
      }
    else{
      encontrei = 0;     
    }              
  }

  if(caractere == '\n') //verificar se é quebra de linha
    {
     quant_linhas++;
    }





    } //fecha o while

  if(existe_linhas)
     quant_linhas++;

    if(encontrei){
        printf("A string pesquisada existe no arquivo");
    }
    else{
        printf("A string pesquisada NAO existe no arquivo");
    }

    printf("\n\n");

printf("A string pesquisada está na linha %d.", quant_linhas);
fclose(arquivo); // libera o ponteiro para o arquivo
}


else
printf("Nao foi possivel abrir o arquivo.");


printf("\n\n");
system("PAUSE");    
return 0;
}

2 个答案:

答案 0 :(得分:1)

当您找到使用break的单词时,会停止while循环并停止从文件中读取字符。

import React, { Component } from 'react';
import {
    ScrollView,
    StyleSheet,
    Text,
    TouchableOpacity,
    View
} from 'react-native';

class RNTest extends Component {
    constructor(props) {
        super(props);

        this.state = {
            data: [],
            counter: 0
        };
    }

    itemPicker() {
        // 'push' will mutate, concat will return a new array
        this.setState({
            data: this.state.data.concat({text: this.state.counter}),
            counter: this.state.counter + 1
        });
    }

    createButton (item, index) {
        // add a unique key, per react warnings
        return (
            <TouchableOpacity
                key={index}
                style={styles.item}
                onPress={this.onPress}>
                    <Text>{item.text}</Text>
            </TouchableOpacity>
        );
    }

    onPress() {
        console.warn('YO!');
    }

    render()  {
        return (
            <ScrollView style={styles.body}>

                <View style={styles.section}>
                    <Text style={styles.sectionHeader}>ITEMS</Text>

                    <View style={styles.gallery}>
                        <TouchableOpacity
                            style={styles.addButton}
                            onPress={this.itemPicker.bind(this)}
                        >
                            <Text>ADD</Text>
                        </TouchableOpacity>

                        {this.state.data.map(this.createButton, this)}
                    </View>
                </View>

            </ScrollView>
        );
    }

}

export default RNTest;

当你找到这个词时,我真的不明白你想做什么,请你试着澄清你在你的代码中想要做什么?

作为旁注,您在开始换行时不会重置encontrei。

答案 1 :(得分:1)

正如TomerSH所说,

if(pos == strlen(pesquisa)) break;

你正在停止while循环,而不是你可以增加一个变量来计算单词出现的次数,并重置你的pos和encontrei变量来搜索文件中的下一个字符。