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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2007, 20:03   #1
Ellita
Пользователь
 
Аватар для Ellita
 
Регистрация: 24.08.2007
Сообщений: 37
Счастье Как удалить слово из строки?

Мне нужно удалить слово каторое заканчивается на ая (типо морская или тверская)
Ellita вне форума Ответить с цитированием
Старый 11.09.2007, 08:54   #2
studenth
Форумчанин
 
Регистрация: 10.09.2007
Сообщений: 105
По умолчанию

//---------------------------------------------------------------------------
#include <vcl.h>
#include <windows.h>
#include <string>
#pragma hdrstop
#pragma argsused
using namespace std;
//---------------------------------------------------------------------------

WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
string Text = " курилы питер тверская морская бумажная гавеная ceшняк виски дура ";

for(int i=0; i<Text.length(); i++)
{
if((Text[i] == 'а') && (Text[i+1] == 'я'))
{ //оканчивается на "ая"

if((Text[i+2] == ' ') || (Text[i+2] == '\0'))
{
int j = ++i;
//это конец слова
do
{
Text.erase(Text.begin() + j);
j--;
i--;
}
while((Text[j] != ' '));
Text.erase(Text.begin() + j);
}

}
}

ShowMessage(Text.c_str());
return 0;
}
//---------------------------------------------------------------------------

первое что пришло в голову.
А можно задачу более конкретно обрисовать? из любой строки, с любыми символами?
Бог сделал людей разными, а генерал Кольт уравнял шансы

Последний раз редактировалось studenth; 11.09.2007 в 10:58.
studenth вне форума Ответить с цитированием
Старый 11.09.2007, 10:45   #3
studenth
Форумчанин
 
Регистрация: 10.09.2007
Сообщений: 105
По умолчанию

честное слово запарился править
вечно спешу куда - то да и кофе в институте кончился...в автомате
в этом примере строка должна быть содержать один пробел впереди....издержки моего дурного метода
Бог сделал людей разными, а генерал Кольт уравнял шансы
studenth вне форума Ответить с цитированием
Старый 11.09.2007, 11:14   #4
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

я бы нашел слово по пробелам, а потом проверял его окончание . но суть та-же
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 12.09.2007, 20:09   #5
Ellita
Пользователь
 
Аватар для Ellita
 
Регистрация: 24.08.2007
Сообщений: 37
По умолчанию

Мне бы просто цикл нужен , так то прога у меня уже готова, только с удалением запарочка!
Ellita вне форума Ответить с цитированием
Старый 17.09.2007, 13:34   #6
studenth
Форумчанин
 
Регистрация: 10.09.2007
Сообщений: 105
По умолчанию

Цитата:
Сообщение от Ellita Посмотреть сообщение
Мне бы просто цикл нужен , так то прога у меня уже готова, только с удалением запарочка!
Еще, помимо примера, можешь почитать про функцию strtok.
Это функция лексимизации строки. тоесть она строку дергает на лексемы, ограниченные параметром.
Бог сделал людей разными, а генерал Кольт уравнял шансы
studenth вне форума Ответить с цитированием
Старый 19.09.2007, 15:38   #7
Персей
Пользователь
 
Регистрация: 18.09.2007
Сообщений: 13
По умолчанию Удаление слова, оканчивающегося на "an"

Протестировал, прогграмма работает, где бы не находилось слово, в конце, в середине или в начале предложения. Слово оканчивающееся на "an" удаляется.

Но удаляется только одно первопапавшееся слово, оканчивающееся на "an".

Вот, посмотри, может появятся какие нибудь соображения.

'\0' означает конец строки

32 десятеричный код пробела
Персей вне форума Ответить с цитированием
Старый 19.09.2007, 15:43   #8
Персей
Пользователь
 
Регистрация: 18.09.2007
Сообщений: 13
По умолчанию Листинг программы удаления слова

Код:
#include <iostream.h>

void main(){
	char str[]="history of American peaple ";// строка
	int i,k;
	i=k=0;
// 1. ищем слово на "an" (ставим индекс i на символ 'a')	
	for(; i!=sizeof(str); i++){
		if(str[i]=='a' && str[i+1]=='n'){ 
			break;
		}
	}
// 2.поиск начала слова, оканчивающегося на "an" 
               // k это индекс начала слова
		if(str[i]=='a'){
			for(;str[i]!=32 && i!=-1; i--);
			k = i+1;
// 3. поиск следующего слова и конца строки	
			for(i++;str[i]!='\0' && str[i]!=32;i++);		
			//cout<<"str[i]="<<str[i]<<i<<"\n";
// 4. удаление слова на "an"
			if(str[i]!='\0'){
				for(;str[i]!='\0';i++,k++){		
					str[k]=str[i];
				}
			}str[k]='\0';
			 
			cout<<str<<"\n\n";
		}	
}

Последний раз редактировалось rpy3uH; 21.04.2009 в 10:26.
Персей вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить из строки подстроку по маске ? - fenix - Помощь студентам 4 23.04.2008 15:04
Как удалить пустые строки в WORD? KUNAR Microsoft Office Word 2 04.09.2007 20:56
Удалить из Memo повторяющиеся строки Etar Компоненты Delphi 2 28.06.2007 18:34
С++ Найти самое длинное слово строки k0z7_g0b1in Общие вопросы C/C++ 3 22.04.2007 17:37
удалить похожие строки ZORRO2005 Microsoft Office Excel 0 28.11.2006 22:03