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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2009, 15:56   #1
Stager
Пользователь
 
Регистрация: 23.11.2008
Сообщений: 41
По умолчанию Есть ли такая команда, чтобы удалить определённую букву в слове?

Вводится одно слово.
Есть ли такая команда(в С++), чтобы удалить определённую букву в слове?
Stager вне форума Ответить с цитированием
Старый 07.01.2009, 16:44   #2
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Цитата:
Сообщение от Stager Посмотреть сообщение
Есть ли такая команда(в С++), чтобы удалить определённую букву в слове?
нет. но можно сделать так
Код:
#include <iostream> 
#include <string>
using namespace std;

char *delChars(const char *str,const char ch,int len)
{
	char *buff;//виходное слова
	int delsum = 0;//кол-во удаляемых сымволов
	int lenbuff;//длина buff
	int j = 0;
	for(int i = 0; i<=len; i++)
	{
		if(str[i] == ch)//если есть совпадение
			delsum++;   //увеличить четчик
	}
	lenbuff = len - delsum;//задаем длину buff
	buff = new char[lenbuff + 1];//выделяем память (+1 для '\0')
	for(int i = 0; i<=len; i++)
	{
		if(str[i] != ch)//если ето не заданый символ
		{
			buff[j] = str[i];//копируем
			j++;
		}
	}
	return buff;
}
int main(void)  
{  
	char *str = "asdafu";
	char *nstr = delChars(str,'a',strlen(str));

	//так наверно былобы правельней
	//char *nstr = new char[strlen(delChars(str,'a',strlen(str)))+1];
	//strcpy(nstr,delChars(str,'a',strlen(str)));

	cout<<nstr<<endl;
	delete[] nstr;
	return 0;
}
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 07.01.2009, 18:26   #3
StarWorm
Форумчанин
 
Регистрация: 17.11.2008
Сообщений: 233
По умолчанию

ISergeyN
1) Я не понял, зачем возвращать указатель на строку, когда можно по этому указателю изменять значения переданной строки...
2) Зачем передавать длину строки len, когда ее можно вычислить внутри функции
3) Кароч на вкус и цвет... Я бы сделал по другому

P.S. а имелось ввиду удалить символ из строки не по индеку, случаем???
StarWorm вне форума Ответить с цитированием
Старый 07.01.2009, 18:43   #4
Stager
Пользователь
 
Регистрация: 23.11.2008
Сообщений: 41
По умолчанию

Нужно удалить букву стоящая после определённой буквы в слове.
Я смог сделал только так, чтобы вместо удаляемой буквы, вставить пробел. А как можно букву удалить?
ISergeyN на ваш код мой компиллятор выдаёт ошибки.
Вот тут к примеру: using namespace std;
Stager вне форума Ответить с цитированием
Старый 07.01.2009, 20:29   #5
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Цитата:
Сообщение от Stager Посмотреть сообщение
ISergeyN на ваш код мой компиллятор выдаёт ошибки. Вот тут к примеру: using namespace std;
замени
Код:
#include <iostream> 
#include <string>
using namespace std;
на
Код:
#include <iostream.h> 
#include <string.h>
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Старый 07.01.2009, 20:41   #6
JamS007
Пользователь
 
Регистрация: 09.11.2008
Сообщений: 68
По умолчанию

Чаще всего используемые методы класса CString:

Compare() сравнивает две строки с учётом регистра символов.
CompareNoCase() сравнивает две строки игнорируя регистры символов
Empty() очищает строку
Find() находи подстроку
GetAt() Считывает символ, который находится в заданной позиции строки.
GetBuffer() возвращает указатель на содержимое строки.
IsEmpty() возвращает TRUE если в строке нет ни одного символа.
MakeReverse() переворачивает строку задом не перед.
Mid() возвращает фрагмент строки, "выдернутый из середины" (находящийся между двумя заданными позициями)
TrimLeft() удаляет ведущие пробелы из строки.
TrimRight() удаляет хвостовые пробелы из строки.
GetLength() возвращяет количество символов строки.

Может-быть найдете что-то полезное.
JamS007 вне форума Ответить с цитированием
Старый 07.01.2009, 21:11   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Простите, что вмешиваюсь, а putchar "не поможет отцу русской демократии"?
mihali4 вне форума Ответить с цитированием
Старый 08.01.2009, 22:38   #8
v_root_mne_logi
 
Регистрация: 08.01.2009
Сообщений: 9
По умолчанию

2 ISergeyN
Сорри, что влажу, но...
#include <iostream.h> еще отработает, а вот <string> и <string.h> две совершенно разные вещи....

<string.h> - это библиотека С, включающая в себя strlen() и прочую си-шную прелесть,
<string> - это шаблонный класс в С++ и заменить одно другим на уровне include, нельзя...

но, если мы уже ваяем в С++, то почему не:

Код:
#include <string>
using namespace std;

void   delChr(string &str, char trg){
       int pos = string::npos;
       while( (pos=str.find(trg)) != string::npos )
              str.erase(pos, 1);
}
или

Код:
#include <string>
using namespace std;

void   delChr(string &str, char trg){
      for(int pos=string::npos; (pos=str.find(trg)) != string::npos; str.erase(pos, 1) );
}
если компилятор выдает ошибку на using namespace std;
то вывода два: либо это не С++ компилятор, либо он жутко древний (музейный)
попробуй убрать эту строку, а везде, вместо "string" написать "std::string"

Последний раз редактировалось v_root_mne_logi; 08.01.2009 в 22:53.
v_root_mne_logi вне форума Ответить с цитированием
Старый 09.01.2009, 00:08   #9
v_root_mne_logi
 
Регистрация: 08.01.2009
Сообщений: 9
По умолчанию

Сори, не заметил:

Цитата:
Сообщение от Stager Посмотреть сообщение
Нужно удалить букву стоящая после определённой буквы в слове.
Тогда так:

Код:
#include <string>

void   delChr(std::string &str, char trg){
       int pos = std::string::npos;
       while( (pos=str.find(trg)) != std::string::npos ){
              if( (pos+1) < str.size() ) // я думаю, что тут вас хотят подловить
                     str.erase(pos+1, 1);
       }
}
если не сделать этот if, то проверяющий засунет эту "определенную букву" в конец строки, я бы так и сделал...

Ну. или по старой доброй традиции отжечь, чтобы у проверяющего поломались глаза:

Код:
#include <string>

void   delChr(std::string &str, char trg){
      for(int pos=std::string::npos; ((pos=str.find(trg)) != std::string::npos) && (pos+1) < str.size(); str.erase(pos, 1) );
}

Последний раз редактировалось v_root_mne_logi; 09.01.2009 в 00:18. Причина: Пожег....
v_root_mne_logi вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удалить лишние пробелы со строки так чтобы между символами осталось по одному пробелу delphi MASIK Общие вопросы Delphi 7 22.12.2010 18:23
Удалить из второй строки те слова, которые есть в первой строке innaa639 Паскаль, Turbo Pascal, PascalABC.NET 2 26.11.2008 15:43
Есть ли такая функция в Паскале?..... maljoha Помощь студентам 2 30.04.2008 13:09
удалить лишние пробелы со строки так чтобы между символами осталось по одному пробелу c++ DimaG Общие вопросы C/C++ 1 01.11.2007 21:50
Есть менюшка. Нужно сделать чтобы курсор был самой строкой. Небесный Паскаль, Turbo Pascal, PascalABC.NET 5 03.10.2007 19:46