Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2015, 11:38   #1
Maglick
Новичок
Джуниор
 
Регистрация: 15.04.2015
Сообщений: 2
По умолчанию Си. строки и символы

Создать текстовый файл, состоящий из случайного количества (не более 30-и) строк. В каждой строке файла содержится случайное количество (не более 20-и) слов, разделенных пробелами. Каждое слово состоит из случайного количества (не более 8-и) строчных латинских букв. Найти в файле строку, содержащую наименьшее количество слов из пяти букв, (если таких строк несколько, то найти все).
Код:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<locale.h>

#define FILE_SIZE 30
#define STR_SIZE 20
#define WORD_SIZE 8

int main(void){
	setlocale(LC_ALL, "ru");
	int i, j, filel, strl, wordl, d, k, str_5[30] = { 0 }, min, count;
	srand(time(NULL));
	FILE *fp;
	if ((fp = fopen("qqq.txt", "w")) == NULL) {
		printf("Error\n");
		exit(1);
	}
	filel = 1 + rand() % FILE_SIZE;                             
	for (i = 0; i < filel; i++) {		                     
		strl = 1 + rand() % STR_SIZE;                           
		for (j = 0; j<strl; j++) {	                             
			wordl = 1 + rand() % WORD_SIZE;                      
			for (d = 0; d < wordl; ++d) 	                     
				putc(97 + rand() % 26, fp);
			putc(' ', fp);
		}
		if (ferror(fp)){
			printf("Error \n");
		}
		putc('\n', fp);
	}
	fclose(fp);

	count = 0;
	i = 0;
	if ((fp = fopen("qqq.txt", "r")) == NULL) {
		printf("Error\n");
		exit(1);
	}
	while ((k = getc(fp)) != EOF) {
		if (k == '\n')
			++i;
		else if (k == ' ') {
			if (count == 5)
				++str_5[i];
			count = 0;
		}
		else if (count < 5)
			++count;
		putchar(k);
	}
	fclose(fp);
	printf("\n");

	min = 20;
	for (j = 0; j < i; ++j)
		if (str_5[j] < min && str_5[j] > 0)
			min = str_5[j];
	if (min == 20)
		printf("Strok, soderzhashih slovo s 5 bukvami  net \n");
	else {
		printf("Stroki, soderzhashie  naimenshee  kolichestvo slov s 5 bukvami  : ");
		for (j = 0; j < i; ++j)
			if (str_5[j] == min)
				printf("%d, ", j + 1);
	}
	printf("\n");
	printf("Chislo strok: %d\n", i);

	return 0;
}
неправильно указывает строки с наименьшим количеством слов,что не так?

Последний раз редактировалось Stilet; 15.04.2015 в 11:48.
Maglick вне форума Ответить с цитированием
Старый 15.04.2015, 11:49   #2
Maglick
Новичок
Джуниор
 
Регистрация: 15.04.2015
Сообщений: 2
По умолчанию

переписала вот так
count = 0;
i = 0;
if ((fp = fopen("qqq.txt", "r")) == NULL) {
printf("Error\n");
exit(1);
}
while ((k = getc(fp)) != EOF) {
if (k == '\n')
++i;
else if (k == ' ') {
if (count == 5)
++str_5[i];
count = 0;
}
else if (k <= "%c%c%c%c%c")
++count;
putchar(k);
}
fclose(fp);
printf("\n");

вроде стал правильно считать, или просто везение?
Maglick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача 1-реализована.Задача 2-Найти и вывести символы 2-ой строки не совпавшие с символами 1-ой строки Leshkin Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 12.11.2013 08:57
Символы и строки quade1992 Паскаль, Turbo Pascal, PascalABC.NET 3 27.03.2012 09:29
строки и символы dj0nny Общие вопросы C/C++ 1 29.11.2011 16:24
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27