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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 02.01.2011, 17:38   #1
xellboy8
 
Регистрация: 02.01.2011
Сообщений: 8
По умолчанию удаление удвоенных согласных

добрый вечер не могли бы вы написать программу которая удаляет удвоенные согласные, к примеру слово "удвоенная" надо чтоб было "удвоеая" а не "удвое ая", то есть чтоб удалял а не заменял на пробелы

вот пример программы которую я показал учителю он утверждает что эта программа не удаляет а просто не видит эти символы:

Код:
#include <iostream>
#include <conio.h>
using namespace std;
void main()
{
int i=0,n;
char s[50];
cout<<"Vvedite tekst\n";
gets(s); // Ввод строки
while (s[i]!='\0')
{ 
n=i;
i++;
}
n++;

for(i=0;i<n;i++)
{ 
if(s[i]==s[i+1])
if(s[i]!='e' || s[i]!='u' || s[i]!='i' || s[i]!='o' || s[i]!='a' || s[i]!='y')
{
i=i+2;
}
cout<<s[i];
}

getchar();
}
ЗАРАНЕЕ СПАСИБО!

Последний раз редактировалось ACE Valery; 02.01.2011 в 18:50.
xellboy8 вне форума
Старый 02.01.2011, 18:13   #2
UltimaBeaR
Форумчанин
 
Аватар для UltimaBeaR
 
Регистрация: 21.12.2010
Сообщений: 199
По умолчанию

чтоб посчитать длину строки надо вызвать функцию strlen(s) а не изобретать велосипед)

учитель правильно говорит - задача у тебя изменить строку а ты пробегаешь по символам и выводишь на печать только нужные - чтоб наиболее просто изменить - создай новую строку такой же размерности заполни ее 0лями и выводи не на печать а пиши в эту строку. далее прсото выводишь эту строку. Если такое учителю тоже не понравится то тогда в этом массиве надо находить эти "удаляемые" буквы и смещать все буквы что находятся правее на -1 позицию. или еще способ не использовать char* а использовать std::string и там просто можно вызвать метод erase который сотрет нужный символ.
UltimaBeaR вне форума
Старый 02.01.2011, 18:24   #3
xellboy8
 
Регистрация: 02.01.2011
Сообщений: 8
По умолчанию

Код:
#include <string>
#include <iostream>
#include <algorithm>
#include <iterator>
 
int main()
{
    std::string str;
    const std::string byk("BbCcDdFfGgHhJjKkLlMmNnPpQqRrSsTtVvWwXxZz");
    std::cout << "vvod stroki -->";
    getline(std::cin, str); 
 
    for(std::string::size_type i = 0; i < str.length() - 1; i++)
        if(byk.find(str[i]) != std::string::npos &&  str[i] == str[i + 1])
            str.erase(i, 2);
 
    std::cout << str << std::endl;
    return 0;
}
написал такую программу но когда к примеру ввожу ffddog он выводит ddog не удаляет символ dd что делать ?

Последний раз редактировалось ACE Valery; 02.01.2011 в 18:52.
xellboy8 вне форума
Старый 02.01.2011, 18:31   #4
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

Код:
void strDelete(char *x,int a=0,int b=0){//функция удаляет b символов в строке начиная с a и включая а
	if (b==0)
		b=strlen(x);
	int c=strlen(x);
	while(b>a){
		for(int i=a;i<c;i++)
			x[i]=x[i+1];
		b--;
		c--;
	}	
}
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума
Старый 02.01.2011, 18:37   #5
xellboy8
 
Регистрация: 02.01.2011
Сообщений: 8
По умолчанию

куда этот кусочек вставлять?
xellboy8 вне форума
Старый 02.01.2011, 18:40   #6
UltimaBeaR
Форумчанин
 
Аватар для UltimaBeaR
 
Регистрация: 21.12.2010
Сообщений: 199
По умолчанию

Код:
	if (str.length() > 1)
		for(int i = 0; i < (int)str.length() - 2; i++)
		{
			if (str[i] == str[i + 1])
			{
				if(byk.find(str[i]) != std::string::npos)
                                {
					str.erase(i, 1);
				        i--;
                                }
			}
		}
я переписал твой цикл - вроде так пашет
ЗЫ: а вобще тут лучше вайлом наверно

Последний раз редактировалось UltimaBeaR; 02.01.2011 в 18:44.
UltimaBeaR вне форума
Старый 02.01.2011, 18:57   #7
xellboy8
 
Регистрация: 02.01.2011
Сообщений: 8
По умолчанию

напишите полностью программу пожалуйста, недавно изучать стали только никогда не занимался программированием даже паскадем и делфи
xellboy8 вне форума
Старый 02.01.2011, 19:00   #8
UltimaBeaR
Форумчанин
 
Аватар для UltimaBeaR
 
Регистрация: 21.12.2010
Сообщений: 199
По умолчанию

Цитата:
Сообщение от xellboy8 Посмотреть сообщение
напишите полностью программу пожалуйста, недавно изучать стали только никогда не занимался программированием даже паскадем и делфи
интересно как ты ее сдавать будешь если не можешь даже вставить то что я написал заместо своего цикла который ты сам сюда запостил
UltimaBeaR вне форума
Старый 02.01.2011, 19:22   #9
xellboy8
 
Регистрация: 02.01.2011
Сообщений: 8
По умолчанию

как нибудь сдам
xellboy8 вне форума
Старый 02.01.2011, 19:58   #10
xellboy8
 
Регистрация: 02.01.2011
Сообщений: 8
По умолчанию

ну дк напишите?
xellboy8 вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Равное числом гласных и согласных букв X@OC Общие вопросы по Java, Java SE, Kotlin 4 17.04.2012 00:04
Определить в тексте слово, содержащее минимальное число согласных stasig Помощь студентам 3 15.02.2009 13:11
Удаление гласных, согласных, цифровых символов в строке <zeroql> Паскаль, Turbo Pascal, PascalABC.NET 9 27.11.2008 08:05