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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2010, 18:37   #1
Slavytich
Пользователь
 
Регистрация: 28.10.2010
Сообщений: 26
По умолчанию String в C++

Есть такие задания:
1. Считать с клавиатуры произвольную строку и отформатировать ее следующим образом: между словами только один пробел, в конце строки стоит точка. Реализовать в виде отдельной функции метод обработки строки.
Пример: “aa an hrtt rhhds ” = “aa an hrtt rhhds.”

2. Дан текст, в котором слова отделяются друг от друга одним или несколькими пробелами. Найти в нем слово максимальной длинны и все слова, у которых совпадают с ним первый и последний символ.

Ниже я набросал решение первой задачи, правда есть такая фигня : после самой фразы все пробелы программка не удаляет.
например:
на входе "we rt "
на выходе "we rt ."
а надо "we rt."
Помогите пожалуйста подправить эту фигню, и был бы рад если вы мне помогли со второй задачкой, алгоритм например пояснить
Код:
#include <iostream>
#include <string>
using namespace std;

string solve(const char *s)
{
string stroka=s;
	for(int i=0; i<stroka.max_size() ;i++)
		{
			
				if (stroka[i]==' ')
					while (stroka[i+1]==' ')
					stroka = stroka.erase(i,1);		
					
		}
	
return stroka;
}

void main()
{
char *c;
string s;
c = new char[20];
cout << "Vvedite stroky:"<<endl;
gets(c);
s=c;
s=solve(s.c_str());

cout << s <<".";
system("PAUSE");
}
Slavytich вне форума Ответить с цитированием
Старый 17.12.2010, 21:19   #2
Slavytich
Пользователь
 
Регистрация: 28.10.2010
Сообщений: 26
По умолчанию

Выручайте! Валю зачёт
Slavytich вне форума Ответить с цитированием
Старый 17.12.2010, 21:33   #3
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Попробуй заменить вот это :

Код:
if (stroka[i]==' ')
   while (stroka[i+1]==' ')
   stroka = stroka.erase(i,1);
На вот это :

Код:
if (stroka[i]==' ')
{
   while (stroka[i+1]==' ' || (i+1) == stroka.max_size() )
   stroka = stroka.erase(i,1);	
}
У меня нет компилятора , так что не могу проверить , если есть проблема то пиши , попробую помочь
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 17.12.2010, 21:50   #4
Slavytich
Пользователь
 
Регистрация: 28.10.2010
Сообщений: 26
По умолчанию

Ну блин, со студией что-то , ничего не компилирует, а все программки, которые даже работают виснуть начали... сейчас попробую другую студию поставить.

А вторую задачку как решать? можно натолкунть хоть на путь, в котором идти надо
Slavytich вне форума Ответить с цитированием
Старый 17.12.2010, 22:00   #5
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Цитата:
Сообщение от Slavytich Посмотреть сообщение
Ну блин, со студией что-то , ничего не компилирует, а все программки, которые даже работают виснуть начали... сейчас попробую другую студию поставить.

А вторую задачку как решать? можно натолкунть хоть на путь, в котором идти надо
1. Прогнать твой текст через методу 1 задания .
2. Теперь считать длину слов , слова разделяются символом " " и "." . Когда находишь слова , то запоминай самое длинное слово и его длину , тебе потом надо будет это .
3. Еще раз идешь по массиву , но теперь у тебя есть слово самое длинное , значит у тебя есть и первая и последняя его буква . Теперь ищи все слова , в которых первая и последняя буква , совпадает с первой и последней найденного слова и просто распечатывай их на экран .
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 17.12.2010, 22:08   #6
Slavytich
Пользователь
 
Регистрация: 28.10.2010
Сообщений: 26
По умолчанию

Спасибо! Слушай, а как выдрать слова, разделяющиеся " " и как длину его найти?
Slavytich вне форума Ответить с цитированием
Старый 17.12.2010, 22:22   #7
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Цитата:
Сообщение от Slavytich Посмотреть сообщение
Спасибо! Слушай, а как выдрать слова, разделяющиеся " " и как длину его найти?
Также как ты искал пробелы . Только теперь тебе надо будет все символы , пока не дошел до пробела или точки записывать во временный стринг , а потом просто его длину проверить . Если длина стринга будет больше чем до этого нашел , то слово длинней предыдущего . То есть считать буквы и писать из в стринг , пока следующая буква не пробел и не точка .
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
String большого размера, более 255 String[255] bitSoft Общие вопросы Delphi 9 28.03.2010 19:45
Как получить адрес String строки или преобразовать String madboy4ik Общие вопросы по Java, Java SE, Kotlin 6 15.01.2010 11:57
String Chartvit Общие вопросы C/C++ 2 01.12.2009 18:04
String fdbdfbfd Общие вопросы C/C++ 0 24.11.2009 23:14
string dreamish Общие вопросы C/C++ 18 04.09.2009 17:18