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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2010, 20:31   #1
mansp
Пользователь
 
Регистрация: 27.10.2010
Сообщений: 52
Вопрос строка и слова

нужно создать функцию которая бы для каждого слова в строке создавали новую строку икопировала туда слово
как я понимаю нужно слова моя функция будет находить по пробелам и по по последнему символу "\0" а как создать строки? ведь я точно не знаю сколько будет у меня слов в строке... может создть двухмерный масив или как?
подскажите пожалуйста. буду очень благодарен.

Последний раз редактировалось mansp; 15.12.2010 в 21:16. Причина: граматические ошибки
mansp вне форума Ответить с цитированием
Старый 15.12.2010, 22:02   #2
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Навскидку: вводите строку, пересчитываете в ней (количество пробелов + 1) - это будет количество слов. Потом создаете массив на количество слов.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 15.12.2010, 22:24   #3
mansp
Пользователь
 
Регистрация: 27.10.2010
Сообщений: 52
По умолчанию

Код:
void Mfunc()
{
	char str [50];
	gets(str);
	int size=0;
	for ( ; str[size]!=0; size++){}
	int count=1;
	for( int i= 0; i<= size; i++)
	{
		if (str[i-1]==' ')
			continue;

		if(str[i]==' ')
		{
			count++;
		}

	}
	char ** rows = new char*[count];
	for (int i = 0; i <= count; i++)
		{
			rows[i] = new char[50];
		}
	int k=0, j=0;
	for(int i=0;i<=size;i++)
	{
		
		rows[k][j]=str[i];
		if (str[i]==' ')
		{
			rows[k][j++]=NULL;
			k++;
			j=0;
		}
	}

	for(int i=0;i<=k++; i++)
	{
		int i2=0;
		cout<<endl;
		for (; i2<50; i2++)
		{
			cout<<rows[i][i2];
		}
	}
}
ну вот я сделал но функция работать не хочет =((
хотя ошибок нет
mansp вне форума Ответить с цитированием
Старый 15.12.2010, 22:44   #4
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Тогда что значит "работать не хочет"?
И еще два вопроса:
1) зачем это for ( ; str[size]!=0; size++){} ?
2) И зачем это if (str[i-1]==' ') continue;

И в циклах for (int i = 0; i <= count; i++) Не делайте <=, вам этого не надо. Надо просто <
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 15.12.2010, 23:59   #5
mansp
Пользователь
 
Регистрация: 27.10.2010
Сообщений: 52
По умолчанию

Цитата:
Тогда что значит "работать не хочет"?
в итоге на экран выводитса какаято линия, по хоже я где то намудрил ,мб в циклах...

Цитата:
зачем это for ( ; str[size]!=0; size++){} ?
узнаём длину строки(стандартными функциями типа strlen()пользоватса нельзя)
Цитата:
И зачем это if (str[i-1]==' ') continue;
если в строке будет несколько пробелов между словами

Последний раз редактировалось mansp; 16.12.2010 в 00:09.
mansp вне форума Ответить с цитированием
Старый 16.12.2010, 00:13   #6
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

функция подсчета слов


Код:
int slovKol(char * text)
{
	int kolSlov=0;
	int strle,perpro,i;
	strle=strlen(text);
	for (perpro=0;perpro<strle;perpro++){
		if ((text[perpro]!=' ')&&(text[perpro]!='\t'))	//находим индекс первого непробела
			break;
	}
	for (i=perpro;i<strle;i++)
	{
		if ((text[i]!=' ')&&((text[i+1]==' ')||(text[i+1]=='\0')))//если предыдущий сивол - буква, а следующий - не буква
			kolSlov++;
	}
	for (i=perpro+1;i<strle;i++)//опционально, если текст набирал невнимательный человек
	{
		if (((text[i-1]==' ')&&((text[i+1]==' ')||(text[i+1]=='\0')))&&((text[i]=='.')||(text[i]==',')))//если _._ или _,_ то уменьшаем количество слов
			kolSlov--;

	}

	return kolSlov;
}
если будете работать в последней версии VC++ - свободно можно заменять
char*text на string & text
strle=text.length();

если стандартными функциями пользоваться нельзя (вот это конечно сущий бред сивой кобылы, попроси чтобы препод полностью переписал функционал ifstream/ofstream, потом можно поржать, если он не справится, а если напишет без подсматриваний - то он злой, плохой, из средней истории, тиран и деспот :D ), то заменяете

Код:
int slovKol(char * text)
{
	int kolSlov=0;
	int ,perpro=0,i;
	while(1){
		if ((text[perpro]!=' ')&&(text[perpro]!='\t'))	//находим индекс первого непробела
			break;
		perpro++;
	}
	i=perpro;
	while(1)
	{
		if ((text[i]!=' ')&&((text[i+1]==' ')||(text[i+1]=='\0')))//если предыдущий сивол - буква, а следующий - не буква
			kolSlov++;
		if (text[i]=='\0')
			break;
		i++;
	}
	i=perpro+1;
	while(1)//опционально, если текст набирал невнимательный человек
	{
		if (((text[i-1]==' ')&&((text[i+1]==' ')||(text[i+1]=='\0')))&&((text[i]=='.')||(text[i]==',')))//если _._ или _,_ то уменьшаем количество слов
			kolSlov--;
		if (text[i]=='\0')
			break;
		i++;
	}

	return kolSlov;
}
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery

Последний раз редактировалось kaljan775; 16.12.2010 в 00:22.
kaljan775 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана строка символов, содержащая слова. Определить количество слов, последний и предпоследний символы кот RamZax Паскаль, Turbo Pascal, PascalABC.NET 2 17.06.2010 14:06
Разбить текст на слова и произвести поиск каждого слова по текстовому массиву Burning_brook Microsoft Office Excel 2 22.05.2010 01:56
строка (занести в массивы - буквы и слова) Lodyr Помощь студентам 21 21.12.2009 20:09
СИ. Удалить слова, которые содержат все повторяющиеся буквы первого слова nick23 Помощь студентам 7 01.11.2009 14:47
Как удалить текст до слова, потом от слова ? littlecoder Общие вопросы Delphi 7 29.12.2008 00:57