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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.11.2012, 21:05   #1
Vinokurov-amm
 
Регистрация: 04.11.2012
Сообщений: 7
По умолчанию

С помощью чего лучше всего удалить символ, удвоить символ?

Код:
#include <vcl.h>
#include <iostream>
#include <conio>
#include <cstring.h>
using namespace std;

#pragma hdrstop


#pragma argsused
int main(int argc, char* argv[])
{   int n,i;
    cin>>n;

    char *s = new char[n];
    for (i=0;i<n;i++){
    cin>>s[n];
    if (s[n] =='*') //то удалить символ
    //иначе удвоить его

    //вывести последовательность 
        getch();
        return 0;
}

Последний раз редактировалось Stilet; 04.11.2012 в 21:24.
Vinokurov-amm вне форума Ответить с цитированием
Старый 04.11.2012, 21:29   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Думаю что лучше использовать класс string.
В противном случае придется писать свои процедуры модификации строки.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.11.2012, 21:42   #3
Vinokurov-amm
 
Регистрация: 04.11.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Думаю что лучше использовать класс string.
В противном случае придется писать свои процедуры модификации строки.
Можно немного подробнее на счет класса string? почему это лучше?
Vinokurov-amm вне форума Ответить с цитированием
Старый 04.11.2012, 22:34   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Наверное потому что там уже все написано до нас:
Код:
	string s="123435";
	
	for(int i=0;i<s.length();i++){
		if(s[i]=='3')	s.insert(++i,"3");
		if(s[i]=='4')	s.erase(i--,1);
	}
	printf("%s",s.c_str());
	getchar();
Удалит все 4-ки и склонирует 3-ки в строке.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.11.2012, 23:12   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Я бы вообще не модифицировал строку, а создал новую размером n*n и в неё добавлял только нужные символы, пропуская те, что нужно удалить.
pu4koff вне форума Ответить с цитированием
Старый 05.11.2012, 00:31   #6
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

2pu4koff
Цитата:
размером n*n
2*n

2Stilet
на итераторах лучше
Код:
string str = "*so*me* s**tri***ng***";
string::iterator It = str.begin();

while (It != str.end())
	It = (*It == '*') ? str.erase(It) : str.insert(It + 1, *It) + 1;

cout << str << endl;
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; 05.11.2012 в 00:56.
pproger вне форума Ответить с цитированием
Старый 05.11.2012, 04:34   #7
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
Сообщение от pproger
на итераторах лучше
Чем лучше?
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 05.11.2012, 06:51   #8
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Код:
#include <cstdio>
#include <string>
#include <algorithm>

int main(){
	// удалить символ '*'
	std::string s = "**abc***[ops]**2*0*1*2***a";

	std::string::iterator it = std::remove(s.begin(), s.end(), '*'); 
	if(it != s.end())
		s.erase(it, s.end());

	puts(s.c_str());

	// удвоить символ 'a'
	char ch = 'a';
	std::string::iterator i = s.begin();
	while((i = std::find(i, s.end(), ch)) != s.end())
		i = s.insert(i, ch) + 2;
	
	puts(s.c_str());
    return 0;
}
Nuklon вне форума Ответить с цитированием
Старый 05.11.2012, 10:37   #9
Vinokurov-amm
 
Регистрация: 04.11.2012
Сообщений: 7
По умолчанию

//---------------------------------------------------------------------------
Код:
#include <vcl.h>
#include <iostream>
#include <conio>
#include <cmath>
#include <cstring.h>
using namespace std;

#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{   string s,s1;

    cin>>s;
    int x=s.find('*');

    while(x<s.size()){
    s.erase(x,1);
    x=s.find('*');
                      }
     for(int i=0;i<s.length();i++){ s1=s[i];

                	s.insert(++i,s1);   }


    cout<<s;
        getch();
        return 0;
}
//---------------------------------------------------------------------------
Так можно?
Vinokurov-amm вне форума Ответить с цитированием
Старый 05.11.2012, 15:10   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Запусти - работает? Тогда можно
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удвоить символ в строке Alexander1205 Общие вопросы C/C++ 1 01.04.2011 00:56
Дан символ C и строка S. Удвоить каждое вхождение символа C в строку S. MrJohanson Помощь студентам 1 10.03.2010 09:51
Удвоить каждый символ в строке мария2507 Microsoft Office Excel 7 22.12.2009 13:40
Удвоить каждый символ строки, потом перевернуть строку Didi Помощь студентам 6 20.05.2008 15:33