Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление всех пробелов в строке 
V
    Опции темы
stat007
Дата 18.2.2009, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: -2
Всего: -4



Поскажите как удалить ВСЕ пробелы в строке?
Напимер: 
Enter string:
mama mila   ramu ! !

Что бы выводила такой результат:
mamamilaramu!!

PM MAIL   Вверх
Andrey44
Дата 18.2.2009, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 2
Всего: 26



stat007, а покажи как делаешь ты.


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
mes
Дата 18.2.2009, 11:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Код

#include <iostream>
#include <algorithm>

bool is_space(char c) { return c==' '; }

int main()
{

    std::string  s = "1 2 3  456 7 8  9 0 q we   r t z ui";

    s.erase(
             std::remove_if(s.begin(), s.end(), is_space),
                                                            s.end());

    std::cout << s<<std::endl;

    system ("pause");
}

подробности по коду можно найти здесь :

http://www.cplusplus.com/reference/algorithm/
http://www.cplusplus.com/reference/algorithm/remove_if.html
http://www.cplusplus.com/reference/string/string/

Это сообщение отредактировал(а) mes - 18.2.2009, 11:52


--------------------
PM MAIL WWW   Вверх
Djinn
Дата 18.2.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 18.5.2007

Репутация: нет
Всего: 1



mes, + тебе, сенкс, интересные ф-и... не юзал еще smile
PM MAIL   Вверх
bsa
Дата 18.2.2009, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Djinn @ 18.2.2009,  13:53)
mes, + тебе, сенкс, интересные ф-и... не юзал еще smile

Почитай книжку по стандартным библиотекам Си и Си++. Много интересного узнаешь. smile 
PM   Вверх
stat007
Дата 18.2.2009, 21:18 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: -2
Всего: -4



благодарю.. спасибо.
теперь такой вопрос: Как разделить строку на пробулы после каждой буквы:
т.е. например:
Enter string:
Hello World!
Должно вывести:
H e l l o W o r l d !

Модератор: Пожалуйста, один топик - один вопрос.

Это сообщение отредактировал(а) bsa - 19.2.2009, 12:10
PM MAIL   Вверх
cutwater
Дата 18.2.2009, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: 2
Всего: 10



stat007, это же элементарно! Вы читали хотя бы одну книгу по С++?



--------------------
user posted image
PM MAIL   Вверх
mes
Дата 18.2.2009, 21:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



неужели самому попробовать для начала трудно, и выложить хотя бы неработающий код для исправления.
если всё будут решать за Вас Вы так никогда ничему и не научитесь.
в ссылках из предыдущего поста функций (с  их полным описанием и примерами) предостаточно, чтоб решить Вашу задачу.


вначале удалить лишние пробелы, а после вставить пробел после каждой буквы
например так:
Код

    for (std::string::iterator it = s.begin(); it!=s.end() && ++it!=s.end(); ++it)  it=s.insert(it,' ');

одно из условий можно вынести за цикл (т.е перед циклом проверить что в строке есть хотя бы один символ) - но это уж сами..


Это сообщение отредактировал(а) mes - 18.2.2009, 22:07


--------------------
PM MAIL WWW   Вверх
bsa
Дата 19.2.2009, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196




M
bsa
stat007, если сам писать код не хочешь, то тебе сюда.
Если ответ на свой вопрос (тот который в заглавии) ты получил, то пометь тему решенной

PM   Вверх
afanp
Дата 19.2.2009, 17:13 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



Код

// bew.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main(){
    string s1;
    string s2=" ";
    getline(cin,s1);
    string s3;
    for(int i=0;i<s1.length();i++){
        if( (int(s1[i])>=65  && int(s1[i])<=90)  ||  (int(s1[i]) >=97 && int(s1[i]) <=122) )
            s3=(s3+s1[i])+s2;}

    cout << s3;
    system("pause");
    return 0;
}

вотъ
PM MAIL   Вверх
mes
Дата 19.2.2009, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(afanp @  19.2.2009,  16:13 Найти цитируемый пост)
 if( (int(s1[i])>=65  && int(s1[i])<=90)  ||  (int(s1[i]) >=97 && int(s1[i]) <=122) )

65,90, 97, 122 - не кажется ли Вам что эти цифры не несут в себе смысла, да и немного напрягают программиста при чтении кода ?
имхо так будет посимпатичнее :
Код

if( (s1[i])>='A'  && s1[i]<='Z')  ||  (s1[i] >='a' && s1[i] <='z')


а также это не совсем соответствует заданию, так как учитываются только символы английского алфавита... 

Это сообщение отредактировал(а) mes - 19.2.2009, 17:59


--------------------
PM MAIL WWW   Вверх
Kurganec
Дата 19.2.2009, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 6.6.2008
Где: СПБ

Репутация: нет
Всего: нет



Цитата(mes @ 19.2.2009,  17:57)

65,90, 97, 122 - не кажется ли Вам что эти цифры не несут в себе смысла


кажется  smile 

к  тому же программа может работать не верно на некоторых платформах.


PM MAIL ICQ Skype   Вверх
bsa
Дата 19.2.2009, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



тогда уж лучше:
Код
s.erase(std::remove(s.begin(), s.end(), ' '), s.end());

PM   Вверх
afanp
Дата 19.2.2009, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



хм, большое спасибо за советы. А не могли бы Вы пояснить немного что именно происходит 
s.erase(std::remove(s.begin(), s.end(), ' '), s.end()); тут ? 
s.erase это функция удаления каких то символов из строки,я так понимаю,  а вот std::remove?
PM MAIL   Вверх
mes
Дата 19.2.2009, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



а пройти по вышеупомянутой ссылке не пробовали ?
Цитата(mes @  18.2.2009,  10:42 Найти цитируемый пост)
http://www.cplusplus.com/reference/algorithm/remove_if.html

там найдете и описание и условный  вариант реализации и пример использования smile


Это сообщение отредактировал(а) mes - 19.2.2009, 22:17


--------------------
PM MAIL WWW   Вверх
afanp
Дата 19.2.2009, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



английский хромает smile 
PM MAIL   Вверх
mes
Дата 19.2.2009, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



так там и без английского можно вполне справиться..(он не только у Вас хромает и все равно разбираются) главное попытаться smile
там и код самой функции приведен , да к тому же и  в примере в комментах показан результат работы.



Это сообщение отредактировал(а) mes - 19.2.2009, 22:39


--------------------
PM MAIL WWW   Вверх
afanp
Дата 19.2.2009, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



вы тут пока писали, могли бы уже 100 раз объяснить smile 
PM MAIL   Вверх
cutwater
Дата 19.2.2009, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: 2
Всего: 10



Ну как бы google и RTFM никто не отменял. Позитивно если начинающий программист сам ищет ответ на вопрос а не ждет пока ему его преподнесут. это положительно на опыте сказывается.


--------------------
user posted image
PM MAIL   Вверх
stat007
Дата 19.2.2009, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: -2
Всего: -4



Cпасибо за помошь... Тема заврыта.
PM MAIL   Вверх
mes
Дата 19.2.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(afanp @  19.2.2009,  21:49 Найти цитируемый пост)
вы тут пока писали, могли бы уже 100 раз объяснить smile  

могли бы.. но
1. пришлось бы писать то, что уже есть по ссылке.. а зачем ?!
2. тогда Вы так и не научитесь пользоваться общедоступной информацией и будете зависить от чьего то объяснения.
  smile 
однако если настаиваете, то:
 функция remove удаляет все элементы удовлетворяющие условию  в указанном диапазоне и возвращает итератор
на конец новой последовательности, но не изменяет размер контейнера. 
Для удаления получившегося мусора используется функция erase, которой передается диапозон от "нового" конца до "реального" конца контейнера. 

P.S. может хоть теперь , чтоб понять объяснение попробуете воспользоваться тем что под ссылкой  smile 


Это сообщение отредактировал(а) mes - 19.2.2009, 23:55


--------------------
PM MAIL WWW   Вверх
Dmi3ev
Дата 20.2.2009, 02:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 13
Всего: 41



А я бы посоветовал stat007-у самому сначала поработать с символами, не используя наворотов ваще, типа этого что-то:
Код


#include "stdafx.h"
#include <iostream>

using namespace std;

int mystrlen (char *s)
{
return (sizeof(s)/sizeof(char));
}

char* delspaces (char* s)
{
    char *res=new char[mystrlen(s)+1];
    char *b=res;
    while (*s)
    {
        if (*s!=' ')
        {
            *res=*s;
            res++;
            s++;
        }
        else
            s++;
    }
    *res='\0';
    res=b;
    return res;
}
char* ch_sp_ch(char *s)
{
    char *res=new char[mystrlen(s)*2];
    char *b=res;
    while (*s)
    {
      *res=*s;
      res++;
      *res=' ';
      res++; s++;
    }
    *res='\0';
    res=b;
    return res;
}

int _tmain()
{
    cout<<ch_sp_ch(delspaces("Hello world!"))<<endl;
    system("pause");
    return 0;
}

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


--------------------

PM MAIL   Вверх
bsa
Дата 20.2.2009, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(stat007 @ 19.2.2009,  23:00)
Cпасибо за помошь... Тема заврыта.


M
bsa
пометь тему решенной

PM   Вверх
afanp
Дата 20.2.2009, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 25.11.2008

Репутация: нет
Всего: нет



mes,  спасибо 
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0674 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.