Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.80
clown_exe
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
#1

Заменить каждую последовательность, содержащую более одного пробела, на один пробел - C++

16.01.2014, 04:26. Просмотров 2143. Ответов 34
Метки нет (Все метки)

В заданной строке заменить каждую последовательность, содержащую более одного пробела, на один
пробел.
Например: "a bcd ef . gh 90" - "a bcd ef . gh 90"

Всё что я на данный момент смог, это создать строку... Подскажите
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2014, 04:26     Заменить каждую последовательность, содержащую более одного пробела, на один пробел
Посмотрите здесь:
Заменить в строке каждую последовательность из двух и более пробелов на один пробел C++
Каждую группу из n последовательно стоящих символов ‘’ (пробел) и '\t' (табуляция) заменить на один пробел C++
Заменить в строке последовательность пробелов на один пробел. C++
C++ В тексте вставить между словами вместо одного пробела запятую и пробел
C++ Каждую латинскую букву, идущую после пробела, заменить на большую
C++ Заменить в тексте каждую точку многоточием, если после точки есть пробел
C++ Вставить после каждого символа «.» один символ « » (пробел), если после точки нет пробела.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Модератор
Эксперт CЭксперт С++
7172 / 4338 / 633
Регистрация: 29.11.2010
Сообщений: 11,784
16.01.2014, 04:32     Заменить каждую последовательность, содержащую более одного пробела, на один пробел #2
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <sstream>
#include <string>
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    std::istringstream ist(str);
    for (std::string word; ist >> word; std::cout << word << " ");
}
Очень показательный пример у вас
clown_exe
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 04:37  [ТС]     Заменить каждую последовательность, содержащую более одного пробела, на один пробел #3
Простите, вы бы не могли пояснить, что означает std: и структуру работы. Я "умею" писать только с помощью printf - scanf
abit
262 / 261 / 33
Регистрация: 03.02.2013
Сообщений: 715
16.01.2014, 04:40     Заменить каждую последовательность, содержащую более одного пробела, на один пробел #4
Цитата Сообщение от clown_exe Посмотреть сообщение
Простите, вы бы не могли пояснить, что означает std: и структуру работы. Я "умею" писать только с помощью printf - scanf
std - это область видимости стандартной библиотеки C++ иначе называемой STL
а свои printf/scanf засуньте в ... Си, тут C++
Croessmah
Модератор
Эксперт CЭксперт С++
13055 / 7318 / 815
Регистрация: 27.09.2012
Сообщений: 18,055
Записей в блоге: 3
Завершенные тесты: 1
16.01.2014, 04:40     Заменить каждую последовательность, содержащую более одного пробела, на один пробел #5
Цитата Сообщение от clown_exe Посмотреть сообщение
Я "умею" писать только с помощью printf - scanf
Си?
Цитата Сообщение от clown_exe Посмотреть сообщение
что означает std: и структуру работы.
using namespace std
clown_exe
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 04:41  [ТС]     Заменить каждую последовательность, содержащую более одного пробела, на один пробел #6
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
Croessmah
Модератор
Эксперт CЭксперт С++
13055 / 7318 / 815
Регистрация: 27.09.2012
Сообщений: 18,055
Записей в блоге: 3
Завершенные тесты: 1
16.01.2014, 04:42     Заменить каждую последовательность, содержащую более одного пробела, на один пробел #7
Цитата Сообщение от abit Посмотреть сообщение
область видимости
scope
clown_exe
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 04:45  [ТС]     Заменить каждую последовательность, содержащую более одного пробела, на один пробел #8
Цитата Сообщение от abit Посмотреть сообщение
std - это область видимости стандартной библиотеки C++ иначе называемой STL
а свои printf/scanf засуньте в ... Си, тут C++
Эх, ещё не пробовал писать так,но видимо пора научиться

Добавлено через 2 минуты
Цитата Сообщение от abit Посмотреть сообщение
std - это область видимости стандартной библиотеки C++ иначе называемой STL
а свои printf/scanf засуньте в ... Си, тут C++
Я благодарен за пояснение и совет, я прислушаюсь.
Но всё же, вы бы не могли помочь мне с программой ?
MrGluck
Модератор
Эксперт CЭксперт С++
7172 / 4338 / 633
Регистрация: 29.11.2010
Сообщений: 11,784
16.01.2014, 04:51     Заменить каждую последовательность, содержащую более одного пробела, на один пробел #9
Цитата Сообщение от abit Посмотреть сообщение
стандартной библиотеки C++ иначе называемой STL
совсем не так. STL - стандартная библиотека шаблонов, она входит в стандартную библиотеку, но последняя не состоит исключительно из STL. Например, iostream, string...

В своей программе я сначала объявил строку (std::string). Затем считал в неё данные, использую getline, что позволяет записать не одно слово, а грубо говоря все, что ввели до нажатия Enter. Потом я инициализирую объект istringstream данной строкой. Данный объект позволяет считывать с него данные как если бы мы читали со стандартного устройства ввода (std::cin).
Потом в цикле я объявляю слово - элемент std::string и до тех пор, пока у меня удалось считать новый элемент с "буфера" - вывожу его на экран, разделяю пробелами.
Вот и все, осталось лишь подтянуть матчасть.
abit
262 / 261 / 33
Регистрация: 03.02.2013
Сообщений: 715
16.01.2014, 04:56     Заменить каждую последовательность, содержащую более одного пробела, на один пробел #10
Цитата Сообщение от clown_exe Посмотреть сообщение
Я благодарен за пояснение и совет, я прислушаюсь.
Но всё же, вы бы не могли помочь мне с программой ?
Чем конкретно помочь? код от MrGluck очень удачен и есть решение

Добавлено через 4 минуты
совсем не так. STL - стандартная библиотека шаблонов, она входит в стандартную библиотеку, но последняя не состоит исключительно из STL. Например, iostream, string...
это не есть предмет о чём спорить, да iostream там вроде не входят, но всё же таки входят - http://msdn.microsoft.com/ru-ru/library/hft11816.aspx
отстаёте от жизни )
MrGluck
Модератор
Эксперт CЭксперт С++
7172 / 4338 / 633
Регистрация: 29.11.2010
Сообщений: 11,784
16.01.2014, 04:58     Заменить каждую последовательность, содержащую более одного пробела, на один пробел #11
abit, старые библиотеки iostream - iostream.h, в них объекты std::cin и std::cout используют глобальное пространство имен, т.е. ::cin, ::cout. Строго говоря, там вообще нет пространства имен т.к. писались они как раз до введения namespace-ов.

http://ru.wikipedia.org/wiki/Стандар..._языка_C%2B%2B
Croessmah
Модератор
Эксперт CЭксперт С++
13055 / 7318 / 815
Регистрация: 27.09.2012
Сообщений: 18,055
Записей в блоге: 3
Завершенные тесты: 1
16.01.2014, 05:00     Заменить каждую последовательность, содержащую более одного пробела, на один пробел #12
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstdio>
 
 
void foo ( char * dest , const char * source ) {
  for( ; (*dest=*source);++source,++dest){
    if(*source!=' ')
      continue;
    *(dest++)=*source;
    for(;*source==' ';++source)
      ;
    *dest=*source;
  }
}
 
 
int main(){
  char str [ 1024 ] ;
  printf ( "Input string->") ;
  gets ( str ) ;
  foo ( str , str ) ;
  printf ( "\n%s" , str ) ;
}
clown_exe
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 05:01  [ТС]     Заменить каждую последовательность, содержащую более одного пробела, на один пробел #13
Цитата Сообщение от abit Посмотреть сообщение
Чем конкретно помочь? код от MrGluck очень удачен и есть решение
Проблема в том, что его код написан сложно для меня... =(
И как я проверил он выполняет немного другую функцию. Я не знаю, как в строке искать символ Пробела, и если несколько пробелов идут друг за другом , заменить их на 1. Мне бы хоть, нужные функции найти.
abit
262 / 261 / 33
Регистрация: 03.02.2013
Сообщений: 715
16.01.2014, 05:06     Заменить каждую последовательность, содержащую более одного пробела, на один пробел #14
Цитата Сообщение от clown_exe Посмотреть сообщение
Проблема в том, что его код написан сложно для меня... =(
И как я проверил он выполняет немного другую функцию. Я не знаю, как в строке искать символ Пробела, и если несколько пробелов идут друг за другом , заменить их на 1. Мне бы хоть, нужные функции найти.
скорее всего нужная вам "функция" - это std::string::find_first_of( " " ) - http://www.cplusplus.com/reference/s...find_first_of/
от туда начинайте свои копания
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.01.2014, 05:09     Заменить каждую последовательность, содержащую более одного пробела, на один пробел
Еще ссылки по теме:
C++ Работа с файлами. Удалить все лишние пробелы, оставив между словами не более одного пробела
Заменить подряд идущие пробелы на один пробел C++
Каждую цифру заменить на заключенную в круглые скобки последовательность знаков ‘+’ C++
C++ Каждую цифру заменить на заключенную в круглые скобки последовательность знаков
C++ Дан текстовый файл. Заменить в нем все подряд идущие пробелы на один пробел.

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
clown_exe
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 05:09  [ТС]     Заменить каждую последовательность, содержащую более одного пробела, на один пробел #15
Croessmah, Спасибо, программа работает, но функция написанная вами... не могли бы вы её пояснить построчно, немного ?
Yandex
Объявления
16.01.2014, 05:09     Заменить каждую последовательность, содержащую более одного пробела, на один пробел
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru