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

> Внимание!

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

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

 
 Ответить  Открыть новую тему 
> Файлы, Язык Си
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


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

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

Программа:
Код

# 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);
  }



Сообщение отредактировано: Neon6868 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


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

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


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

Сообщение отредактировано: Neon6868 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


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

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


Я вопрос не совсем понял, но наверно пробелом!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


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

# 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;
}


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


Я твою программу проверил,но там 5 ошибок!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


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

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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


Компилятор 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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


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

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

# 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;
}


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


Теперь уже 2 ошибки:
11 строка-Declaration is not allowed
18 строка-Declaration is not allowed
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


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

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

FILE* f;


А вот 18

int count, back, i;


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

int i;
int count;
int back;


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


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

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

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


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

Сообщение отредактировано: Neon6868 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


Вот ссылка: Архив Turbo C
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


# 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;
}




--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


klem4

Большое спасибо! Очень помог!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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