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

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

Форум «Всё о Паскале» _ Ада и другие языки _ Файлы

Автор: Neon6868 21.04.2007 22:09

Задание:Написать программу, которая считывает текст из файла и определяет, сколько в нём слов, состоящих из не более чем четырёх букв.

Я написал открытие и чтение из файла, а как делать дальше, чтобы узнать сколько слов, состоящих из не более чем четырёх букв. Подскажите хотя бы идею!!!

Программа:

Код

# include <stdio.h>
void main ()
  {
  FILE *fin;
  fin=fopen("G:\\text.txt","rt");
  if (!fin)
    {
    printf("\nOshibka otkritiya faila!");
    return;
    }
  fseek(fin,0,SEEK_END);
  long len=ftell(fin);
  char *buf=new char[len+1];
  const int l_block=1024;
  int num_block=len/l_block;
  fseek(fin,0,SEEK_SET);
  fread(buf,l_block,num_block+1,fin);
  buf[len]='\0';
  long i=0;
  fclose(fin);
  }


Автор: klem4 21.04.2007 22:15

Язык - то какой ? телепат штатный в отпуске ...

Автор: Neon6868 21.04.2007 22:17

Цитата(klem4 @ 21.04.2007 19:15) *

Язык - то какой ? телепат штатный в отпуске ...


Извини, забыл написать! Язык-Си

Автор: klem4 21.04.2007 22:34

Как могут разделяться слова ?

Автор: Neon6868 21.04.2007 22:36

Цитата(klem4 @ 21.04.2007 19:34) *

Как могут разделяться слова ?


Я вопрос не совсем понял, но наверно пробелом!

Автор: klem4 21.04.2007 23:00

В принципе не важно ...

# include <stdio.h>
# include <conio.h>
# include <string.h>
# define file_name "C:\\text.txt"
# define limits " ;,.?!"

int main(void) {
char *s = new char[255];
FILE* f;

if (!(f = fopen(file_name, "rt"))) {
printf("Cant open file '%s'\n", file_name);
return 0;
}

int count = 0;
int back;
while (fgets(s, 255, f)) {
puts(s);
int i = 0;
while (i < strlen(s)) {
while ((i < strlen(s)) && (strchr(limits, s[i]))) i++;
if (i < strlen(s)) {
back = i;
while ((i < strlen(s)) && (!(strchr(limits, s[i])))) i++;
count += (i - back - 1 <= 4) ? 1 : 0;
}
}
}

printf("count = %d\n", count);

fclose(f); delete(s);

return 0;
}

Автор: Neon6868 21.04.2007 23:41

Я твою программу проверил,но там 5 ошибок!

Автор: klem4 21.04.2007 23:43

очень интересно ... а главное аргументированно и информативно.

Какие ошибки ? В каких строках ? При каких входных данных ? Какой компилятор ?

Автор: Neon6868 22.04.2007 0:29

Компилятор Turbo C
Ошибки:
8 строка-Undefined symbol new
8 строка-Declaration syntax error
15 строка-Declaration is not allowed
16 строка-Declaration is not allowed
19 строка-Declaration is not allowed

Автор: klem4 22.04.2007 0:33

Интересно как ты свою программу компилировал ...

Попробуй вот так:

# include <stdio.h>
# include <conio.h>
# include <string.h>
# include <alloc.h>
# define file_name "C:\\text.txt"
# define limits " ;,.?!"

int main(void) {
char *s;
s = (char*)malloc(255 * sizeof(char));
FILE* f;

if (!(f = fopen(file_name, "rt"))) {
printf("Cant open file '%s'\n", file_name);
return 0;
}

int count, back, i;
count = 0;
while (fgets(s, 255, f)) {
puts(s);
i = 0;
while (i < strlen(s)) {
while ((i < strlen(s)) && (strchr(limits, s[i]))) i++;
if (i < strlen(s)) {
back = i;
while ((i < strlen(s)) && (!(strchr(limits, s[i])))) i++;
count += (i - back - 1 <= 4) ? 1 : 0;
}
}
}

printf("count = %d\n", count);

fclose(f); free(s);

return 0;
}

Автор: Neon6868 22.04.2007 0:50

Теперь уже 2 ошибки:
11 строка-Declaration is not allowed
18 строка-Declaration is not allowed

Автор: klem4 22.04.2007 0:54

Заархивируй папку с компилятором и присоедини сюда ... У меня нету чистого сишного компилятора.

По поводу 11 строки пока не знаю в чем проблема

FILE* f;


А вот 18

int count, back, i;


Попробуй каждую переменную на отдельной строке описать.

int i;
int count;
int back;

Автор: Neon6868 22.04.2007 1:12

У меня не получается архив присоединить!

Добавлено через 13 мин.

Код

А вот 18
int count, back, i;
Попробуй каждую переменную на отдельной строке описать.


Я так сделал, теперь стало 4 такие же ошибки!
Одна в 19 строке, другая-в 20.

Автор: klem4 22.04.2007 1:35

Бред какой-то ... ну залей архив на zalil.ru или на webfile.ru раз сюда не получается ...

Автор: Neon6868 22.04.2007 1:46

Вот ссылка: http://slil.ru/24271230

Автор: klem4 22.04.2007 1:55

# include <stdio.h>
# include <conio.h>
# include <string.h>
# define file_name "C:\\text.txt"
# define limits " ;,.?!"

FILE *f;

int count, back, i;

int main(void) {
char *s;
s = (char*)malloc(255 * sizeof(char));

if (!(f = fopen(file_name, "rt"))) {
printf("Cant open file '%s'\n", file_name);
return 0;
}

count = 0;

while (fgets(s, 255, f)) {
puts(s);
i = 0;
while (i < strlen(s)) {
while ((i < strlen(s)) && (strchr(limits, s[i]))) i++;
if (i < strlen(s)) {
back = i;
while ((i < strlen(s)) && (!(strchr(limits, s[i])))) i++;
count += (i - back - 1 <= 4) ? 1 : 0;
}
}
}

printf("count = %d\n", count);

fclose(f); free(s);

return 0;
}



Автор: Neon6868 22.04.2007 3:14

klem4

Большое спасибо! Очень помог!