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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2016, 20:10   #1
Viiktorrr
Пользователь
 
Регистрация: 27.01.2014
Сообщений: 13
По умолчанию Проблема с работой с большим текстом(исходник внутри)

Как реализавать посимвольное считывание из консоли чтоб работало с большими текстами. С небольшой строкой у нас считвывает нормально, а с длинной считывание не происходит (зацикливается)
(вводим орпароп4брп5арп программа удаляет 4 и 5 оставшиеся 3 слова сортирует по алфавиту и выдает в консоль)
(вводим лвыопрлывпрлыпрлырвплдывлпрывлоп3ло царфаол - краш )
нужна помощь
Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{

	int dls, i=0;
	char s[300];
	char e;
	printf("Vvedite text\n");
	
	//scanf ("%s", s);
	do
	{
		scanf("%c", &s[i]); 
		i++;
	}
	while(s[i-1] != '\n');
	
	
		s[i-1] = '\0';
	for(i=0; s[i] != '\0'; i++)
	


	dls = strlen(s);
	int j=0,k=0,n=0,f=0;
	char ms[50][400],c[400];

//	printf("%d\n",__LINE__);
	
	while(n<=dls)
	{
 //while(!((s[n] < 0x41 || s[n] > 0x5A) && (s[n] < 0x61 || s[n] >  0x7A)))

while((s[n]!=',' && s[n]!= '.' && s[n]!= '1' && s[n]!= '2' && s[n]!= '3' && s[n]!= '4' && s[n]!= '5' && s[n]!= '6' && s[n]!= '7' && s[n]!= '8' && s[n]!= '9' && s[n]!= '0' && s[n]!= '-' && s[n]!= '=' && s[n]!= '!' && s[n]!= '@' 
&& s[n]!= '#' && s[n]!= '$' && s[n]!= '%' && s[n]!= '^' && s[n]!= '&' && s[n]!= '*' && s[n]!= '(' && s[n]!= ')'&& s[n]!= '_' && s[n]!= '+' && s[n]!= '"' && s[n]!= '¹' && s[n]!= ';' && s[n]!= ':' && s[n]!= '?' && s[n]!= '/'
&& s[n]!= '|' && s[n]!= '>' && s[n]!= '<' && s[n]!= '`' && s[n]!= '~' && s[n]!= ' '))
		
		{
			ms[i][j]=s[n];
			j++; 
			n++;
		}
		
		
		j = 0; 
		
		i++; 
		
		n++;

	}
	
//	printf("%d\n",__LINE__);
	
	do
	{
		f=0;
		for(j=i-1;j>k;j--)
		{ 
			if (strcmp(ms[j],ms[j-1])<0)
			{ 
				strcpy(c,ms[j]);
				strcpy(ms[j],ms[j-1]);
				strcpy(ms[j-1],c);
				f=1;
			} 
		}
		k++;
	}
	while(f);                     
	
//	printf("%d : i=%d\n",__LINE__,i);
	
	for (j=0;j<i;j++)
	{
		//printf("%d\n",__LINE__);
		
		if (ms[j][0])
		printf("text: %s\n",ms[j]);
	}
	
	
	//printf("%d\n",__LINE__);
    
    return EXIT_SUCCESS;
}
Viiktorrr вне форума Ответить с цитированием
Старый 28.05.2016, 20:47   #2
Viiktorrr
Пользователь
 
Регистрация: 27.01.2014
Сообщений: 13
По умолчанию

при вводе большого текста циклится, посоветуйте в какую сторону дальше шагать
Viiktorrr вне форума Ответить с цитированием
Старый 29.05.2016, 09:57   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от Viiktorrr Посмотреть сообщение
посоветуйте в какую сторону дальше шагать
Не использовать массивы фиксированного размера.
Читаем один символ, выделяем память, добавляем и далее опять все с начала.

Лучше выделять память кусочками, когда заполнится, увеличиваем размер кусочка и опять заполняем.
waleri вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ компилятор g++ под Windows проблема с большим размером .exe файла I_I_I Помощь студентам 0 23.02.2013 11:01
Проблема с работой программ Девушка_Мария Общие вопросы C/C++ 2 08.12.2009 17:58