我正在尝试使用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;
}
答案 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变量来搜索文件中的下一个字符。