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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2012, 21:21   #1
Olga1991_1
Пользователь
 
Регистрация: 12.04.2012
Сообщений: 15
Счастье строки ,замена одинаковых символ , что расположены рядом

Ввести фразу. Все последовательности одинаковых символов заменить на выражения N(C). Где N – количество последовательных одинаковых символов, а С – символ.
Например : «Веер и ветер» – «В2(е)р2( )и ветер».

вот все на что я способна:
Код:
#include <iostream>
#include <string.h>
 
using namespace std;
 
int main(){
    char str1[10];
    int n = 2;
    cin.getline(str1,10);
 
    for(int i=0; i<strlen(str1) ; i++){
 
        if(str1[i]==str1[i+1]){
            n = 2;
            for(int j=i+1;j<strlen(str1);j++)
                if(str1[j] == str1[j+1])
                    n++;
            cout<<n<<"("<<str1[i]<<")";
            i = i+(n-1);
            continue;
        }
        else
            cout<<str1[i];
    }
 
}

Последний раз редактировалось Olga1991_1; 01.12.2012 в 22:02.
Olga1991_1 вне форума Ответить с цитированием
Старый 01.12.2012, 22:04   #2
Olga1991_1
Пользователь
 
Регистрация: 12.04.2012
Сообщений: 15
По умолчанию

когда 3 одинаковых буквы , выдает 4 и не все символы
Olga1991_1 вне форума Ответить с цитированием
Старый 01.12.2012, 22:52   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Olga1991_1
ну если на крестах, то как-то так
Код:
#include <iostream>
#include <string>
#include <sstream>

using namespace std;

string getString(const string &str)
{
	string ret;
	string::const_iterator first = str.begin();

	while (first != str.end()) {
		string::const_iterator second = first + 1;
		
		while (second != str.end() && *first == *second)
			++second;

		size_t n = second - first;

		if (n > 1) {
			stringstream ss;
			ss << n;
			ret += ss.str() + string("(") + *first + string(")");
			first = second;
		} else {
			ret += *first++;
		}
	}

	return ret;
}

int main()
{
	string str;
	getline(cin, str);
	cout << getString(str) << endl;
	return 0;
}
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 01.12.2012, 22:58   #4
Olga1991_1
Пользователь
 
Регистрация: 12.04.2012
Сообщений: 15
По умолчанию

моя версия компилятора , не выполняет данные операции((
Olga1991_1 вне форума Ответить с цитированием
Старый 01.12.2012, 23:02   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Olga1991_1
тут ничего нестандартного не используется. видимо у тебя какой нить borland c++ 5.0. ну могу только посочувствовать используй более современные вещи.
покажи хоть, какие ошибки выдает
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 01.12.2012, 23:05   #6
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Код:
#include <iostream>

void  output_pack(std::ostream& hout, const char* s) {
	const char* p;
	while(*s) {
		for(p = s + 1; *p && (*p == *s); *p++);
		if((p - s) > 1) {
			hout << (p - s) << '(' << *s << ')';
			s = p;
			continue;
		} else
			hout << *s;
		*s++;
	}
}


int main(){
    char s[] = "Beep OOOOOOOAAA-XMM";
    output_pack(std::cout, s);
    return 0;
}
Nuklon вне форума Ответить с цитированием
Старый 01.12.2012, 23:11   #7
Olga1991_1
Пользователь
 
Регистрация: 12.04.2012
Сообщений: 15
По умолчанию


Последний раз редактировалось Olga1991_1; 01.12.2012 в 23:14.
Olga1991_1 вне форума Ответить с цитированием
Старый 01.12.2012, 23:15   #8
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

да я же ЭКСТРАСЕНС!!!
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 01.12.2012, 23:51   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Olga1991_1
Мда... Вышеприведенный пример в борланде третьем врядли сработает...

Дописано:
Код:
	char s[255]={0};
        scanf("%s",&s);
	for(int i=0;s[i];i++){
		int c=0;
		for(int j=0;s[i+j] && s[i]==s[i+j];j++) c++;
		if(c>1) {
			printf("%c(%d)",s[i],c);
			i+=c-1;
		} else
			printf("%c",s[i]);
	}
	getchar();
I'm learning to live...

Последний раз редактировалось Stilet; 02.12.2012 в 00:23.
Stilet вне форума Ответить с цитированием
Старый 02.12.2012, 01:16   #10
Olga1991_1
Пользователь
 
Регистрация: 12.04.2012
Сообщений: 15
По умолчанию

спасибо, очень помогли)
Olga1991_1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дано масив из 6 байт. Посчитать число 2х единиц, что расположены между нулями. dino-4udo Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 31 08.06.2019 06:36
SQL поиск одинаковых ячеек и сумма стоящих рядом значений daamail SQL, базы данных 9 11.06.2012 23:30
Задача, вывести пары одинаковых чисел стоящих рядом. Arn1 Помощь студентам 4 03.10.2011 11:39
Алгоритм определения стоящих рядом одинаковых чисел, что не так. leshij Паскаль, Turbo Pascal, PascalABC.NET 2 12.02.2011 16:05
Замена одинаковых значений Ярик 555 Microsoft Office Excel 6 09.02.2010 04:50