Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Нахождение строки в текстовом файле

Автор: -Winniepoohless- 22.04.2008 17:31

Условие задачи: Определить, сколько раз в данном текстовом файле g встречается строка UNIX.
Вроде составил прогу, но почему-то не работает...



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

int main () {
FILE *fp;
int k,n;
char line1[255],line2[5]="UNIX";
if ((fp=fopen("test.txt","r"))==NULL) {
printf("Oshibka pri otkrytii faila.\n");
exit(1);
}
fgetc(fp);
while ((!feof(fp))
if k=strcmp(line1,line2) n=n++;
fgetc(line1,255,fp);
printf("\n%dKolichestvo vhozhdeniy",n);
return 0;
}
}





Автор: volvo 22.04.2008 18:15

Потому что сначала надо откомпилировать, а это сделать невозможно - синтаксис неправильный.

Вот так, скажем:

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

#define MAX_LEN 255

int main () {

FILE *fp;
char s[MAX_LEN + 1], *p;
int n;
char *delimiter = " ,.\n";

if((fp = fopen("test.txt","rt")) == NULL) {
printf("Oshibka pri otkrytii faila.\n");
return 1;
}

n = 0;
while(!feof(fp)) {
fgets(s, MAX_LEN, fp);
p = strtok(s, delimiter);
while(p) {
if(!strcmp(p, "UNIX")) n += 1;
p = strtok(NULL, delimiter);
}
}
printf("\n%d - Kolichestvo vhozhdeniy", n);
return 0;
}



Что непонятно?

Автор: -Winniepoohless- 22.04.2008 18:56

Цитата(volvo @ 22.04.2008 14:15) *

Потому что сначала надо откомпилировать, а это сделать невозможно - синтаксис неправильный.

Вот так, скажем:
#include <stdio.h>
#include <string.h>

#define MAX_LEN 255

int main () {

FILE *fp;
char s[MAX_LEN + 1], *p;
int n;
char *delimiter = " ,.\n";

if((fp = fopen("test.txt","rt")) == NULL) {
printf("Oshibka pri otkrytii faila.\n");
return 1;
}

n = 0;
while(!feof(fp)) {
fgets(s, MAX_LEN, fp);
p = strtok(s, delimiter);
while(p) {
if(!strcmp(p, "UNIX")) n += 1;
p = strtok(NULL, delimiter);
}
}
printf("\n%d - Kolichestvo vhozhdeniy", n);
return 0;
}



Что непонятно?

Спасибо большое за помощь! smile.gif
Можно уточняющий вопрос?
 n = 0;
while(!feof(fp)) {
fgets(s, MAX_LEN, fp);
p = strtok(s, delimiter);
while(p) {
if(!strcmp(p, "UNIX")) n += 1;
p = strtok(NULL, delimiter);

В этом кусочке мы сначала инициализируем функцию strtok, а потом непосредственно используем?
То есть, при отсутствии лексемы, подлежащей возврату, возвращается нулевой указатель? blink.gif

Автор: volvo 22.04.2008 18:59

Ну да, если лексемы в строке закончились, в p возвращается NULL, и цикл завершается.

Автор: Гость 29.04.2008 13:57

Цитата(volvo @ 22.04.2008 14:59) *

Ну да, если лексемы в строке закончились, в p возвращается NULL, и цикл завершается.

Спасибо! smile.gif