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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2011, 18:47   #1
Lapo4ka
Подтвердите свой е-майл
 
Регистрация: 30.04.2011
Сообщений: 44
По умолчанию как разбить строки на слова?

задача такая: Составить программу, которая читает произвольные строки длиной 80 символов, разбивает их по словам (подстрока между двумя пробелами), находит максимальное слово и выводит его на печать. Ввод строк заканчивается вводом символа ‘!’, который не является элементом строки.

я написала код программы, которая считывает строки, до тех пор, пока в конце строки не найдет "!"

Код:
#include "stdafx.h"
#include <string>

struct stroki
{
	char *str;
};

stroki my_s[50];

void main()
{
	char *st=NULL;
	char *str1="!";
	char *str2=" ";
	int i=0;

	while (st == NULL)
	{
			my_s[i].str = (char *)malloc(80*sizeof(char));
			gets(my_s[i].str);
			printf("%s\n", my_s[i].str);
			st = strstr(my_s[i].str, str1);
			printf("%s\n", st);
			i++;
	}
	
}
как удалить в конце последней стоки "!" и как разбить строки на массив слов?

Последний раз редактировалось ACE Valery; 01.05.2011 в 01:08.
Lapo4ka вне форума Ответить с цитированием
Старый 30.04.2011, 19:00   #2
Biggs
Пользователь
 
Регистрация: 15.07.2010
Сообщений: 74
По умолчанию

Слово это символы между пробелами, по пробелам выделяешь слова
Удаление символа происходит по индексу , строка массив у каждого элемента есть индекс
Biggs вне форума Ответить с цитированием
Старый 01.05.2011, 15:05   #3
Lapo4ka
Подтвердите свой е-майл
 
Регистрация: 30.04.2011
Сообщений: 44
По умолчанию

Я пробовала со строками работать, как с массивом, но Visual Studio постоянно выдавал ошибки. Я полазила немного в гугле и у меня получилось без особого труда и работы с массивами разбить строки на слова
Код:
#include "stdafx.h"
#include <string>
#include <conio.h>

struct stroki
{
	char *str;
};

stroki my_s[50];

void main()
{
	char *st=NULL;
	char *str1="!";
	char *str2;
	int i=0;

	while (st == NULL)
	{
			my_s[i].str = (char *)malloc(80*sizeof(char));
			gets(my_s[i].str);
			//printf("%s\n", my_s[i].str);
			st = strstr(my_s[i].str, str1);
			//printf("%s\n", st);
			i++;
	}
	
	
	for (int j=0; j<=i; j++)
	{
		str2 = strtok(my_s[j].str, " ,.!?");
	
		while (str2 != NULL)
		{
			printf ("%s\n",str2);
			str2 = strtok (NULL, " ,.!?");
		}
	}
	
	getch();

}
как теперь найти наибольшее слово из всех?

Последний раз редактировалось Stilet; 01.05.2011 в 15:28.
Lapo4ka вне форума Ответить с цитированием
Старый 01.05.2011, 16:00   #4
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Lapo4ka
Цитата:
как теперь найти наибольшее слово из всех?
Можно проще сделать. В конце выводится список слов по нарастанию длины, в итоге самое последнее слово самое длинное. Можно конечно его сразу вывести, тока я чё-то не допру как из функций статические переменные вытаскивать.

Код:
#include <string>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <regex>
#include <vector>
using namespace std; 


void maximum(string str) {	
	static string max="";
	if(str.length()>max.length()) max = str;
	cout<<max<<endl;
}

int main()
{	
	string str = "The next one. Quick fox jump over the mushrum!";
	vector<string> tokens;
	regex re("([\\s-.!]+)");
 
	sregex_token_iterator begin(str.begin(), str.end(), re, -1), end;
	copy(begin, end, back_inserter(tokens));
	cout<<"word list:"<<endl;
	copy(tokens.begin(), tokens.end(), ostream_iterator<std::string>(cout, "\n"));
	cout<<endl<<"max length:"<<endl;
	for_each(tokens.begin(),tokens.end(),maximum);	
	
	cin.get();
}

Последний раз редактировалось the_deer_one; 01.05.2011 в 16:07.
the_deer_one вне форума Ответить с цитированием
Старый 01.05.2011, 16:26   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Код:
...
char max_str[1024] = "";
for (int j=0; j<=i; j++)
	{
		str2 = strtok(my_s[j].str, " ,.!?");
	
		while (str2 != NULL)
		{
			printf ("%s\n",str2);
			if (strlen(str2) > strlen(max_str)) strcpy(max_str, str2);

			str2 = strtok (NULL, " ,.!?");
		}
	}
	printf("max string: %s\n", max_str);
...
pu4koff вне форума Ответить с цитированием
Старый 01.05.2011, 17:07   #6
Lapo4ka
Подтвердите свой е-майл
 
Регистрация: 30.04.2011
Сообщений: 44
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Код:
...
char max_str[1024] = "";
for (int j=0; j<=i; j++)
	{
		str2 = strtok(my_s[j].str, " ,.!?");
	
		while (str2 != NULL)
		{
			printf ("%s\n",str2);
			if (strlen(str2) > strlen(max_str)) strcpy(max_str, str2);

			str2 = strtok (NULL, " ,.!?");
		}
	}
	printf("max string: %s\n", max_str);
...
спасибо огромное! я уже сама сделала, но так меньше кода
Lapo4ka вне форума Ответить с цитированием
Старый 01.05.2011, 17:09   #7
Lapo4ka
Подтвердите свой е-майл
 
Регистрация: 30.04.2011
Сообщений: 44
По умолчанию

Код:
#include "stdafx.h"
#include <string>
#include <conio.h>


struct stroki
{
	char *str;
};

stroki my_s[50];

void main()
{
	char *st=NULL;
	char *str1="!";
	char *str2;
	char *a[60];   //пустой массив слов
	int i=0;

	//ввод строк

	while (st == NULL)
	{
			my_s[i].str = (char *)malloc(80*sizeof(char));
			gets(my_s[i].str);
			//printf("%s\n", my_s[i].str);
			st = strstr(my_s[i].str, str1);
			//printf("%s\n", st);
			i++;
	}
	
	//выделение памяти на слова в пустом массиве слов
	
	for (int k=0; k<=60; k++)
	{
		a[k]=(char*)malloc(20*sizeof(char));
	}

	//разбиение строк на слова
	
	int n;
	n=0;
	
	for (int j=0; j<=i; j++)
	{
		str2 = strtok(my_s[j].str, " ,.!?");
	
		while (str2 != NULL)
		{
			a[n]=str2;
			//printf ("%s\n",str2);
			str2 = strtok (NULL, " ,.!?");
			n++;
		}
	}

	//печать массива слов
	for (int k=0; k<n; k++)
	{
		printf("%s\n", a[k]);
	}

	//находим максимальное слово
	int n1, max;
	char *maximum;
	max=0;
	for (int k=0; k<n; k++)
	{
		n1 = strlen(a[k]);
		if(n1>max) 
		{
			max = n1;
			maximum = a[k];
		}
	}
	
	printf("maximalnoe slovo: %s\n", maximum);
	getch();
}
вот мой вариант

Последний раз редактировалось Stilet; 01.05.2011 в 17:35.
Lapo4ka вне форума Ответить с цитированием
Старый 01.05.2011, 17:09   #8
Lapo4ka
Подтвердите свой е-майл
 
Регистрация: 30.04.2011
Сообщений: 44
По умолчанию

всем большое спасибо за помощь!
Lapo4ka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
разбить текст на слова yuliyayuliya Помощь студентам 2 05.04.2011 16:31
Разбить текст на слова и произвести поиск каждого слова по текстовому массиву Burning_brook Microsoft Office Excel 2 22.05.2010 01:56
разбить текстовый файл на слова pavel_1406 Общие вопросы C/C++ 3 19.12.2009 22:11
Как разбить число на цифрыКак разбить число на цифры: 3241 => 3,2,4,1 (Pascal) Banderas123 Помощь студентам 3 07.12.2009 18:26
Как ограничить дли строки или слова? AgentVlad PHP 5 19.03.2009 22:19