IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Нахождение строки в текстовом файле, Язык С. Компилятор Турбо С.
сообщение
Сообщение #1


Гость






Условие задачи: Определить, сколько раз в данном текстовом файле 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;
}
}




 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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

Вот так, скажем:
#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;
}



Что непонятно?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата(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
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Ну да, если лексемы в строке закончились, в p возвращается NULL, и цикл завершается.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






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

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

Спасибо! smile.gif
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 31.10.2020 15:01
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name