Помощь - Поиск - Пользователи - Календарь
Полная версия: Нахождение строки в текстовом файле
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Другие языки
-Winniepoohless-
Условие задачи: Определить, сколько раз в данном текстовом файле 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
Потому что сначала надо откомпилировать, а это сделать невозможно - синтаксис неправильный.

Вот так, скажем:
#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-
Цитата(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
Ну да, если лексемы в строке закончились, в p возвращается NULL, и цикл завершается.
Гость
Цитата(volvo @ 22.04.2008 14:59) *

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

Спасибо! smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.