Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/40: Рейтинг темы: голосов - 40, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20

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

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

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

Всё что я на данный момент смог, это создать строку... Подскажите
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.01.2014, 04:26
Ответы с готовыми решениями:

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

Каждую группу из n последовательно стоящих символов ‘’ (пробел) и '\t' (табуляция) заменить на один пробел
Каждую группу из n последовательно стоящих символов ‘’ (пробел) и '\t' (табуляция) заменить на один пробел

Заменить в строке каждую серию подряд идущих пробелов на один пробел
Заменить в строке каждую серию подряд идущих пробелов на один пробел.

34
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
16.01.2014, 04:32
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 << " ");
}
Очень показательный пример у вас
1
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 04:37  [ТС]
Простите, вы бы не могли пояснить, что означает std: и структуру работы. Я "умею" писать только с помощью printf - scanf
0
 Аватар для abit
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,859
16.01.2014, 04:40
Цитата Сообщение от clown_exe Посмотреть сообщение
Простите, вы бы не могли пояснить, что означает std: и структуру работы. Я "умею" писать только с помощью printf - scanf
std - это область видимости стандартной библиотеки C++ иначе называемой STL
а свои printf/scanf засуньте в ... Си, тут C++
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
16.01.2014, 04:40
Цитата Сообщение от clown_exe Посмотреть сообщение
Я "умею" писать только с помощью printf - scanf
Си?
Цитата Сообщение от clown_exe Посмотреть сообщение
что означает std: и структуру работы.
using namespace std
0
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 04:41  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
16.01.2014, 04:42
Цитата Сообщение от abit Посмотреть сообщение
область видимости
scope
0
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 04:45  [ТС]
Цитата Сообщение от abit Посмотреть сообщение
std - это область видимости стандартной библиотеки C++ иначе называемой STL
а свои printf/scanf засуньте в ... Си, тут C++
Эх, ещё не пробовал писать так,но видимо пора научиться

Добавлено через 2 минуты
Цитата Сообщение от abit Посмотреть сообщение
std - это область видимости стандартной библиотеки C++ иначе называемой STL
а свои printf/scanf засуньте в ... Си, тут C++
Я благодарен за пояснение и совет, я прислушаюсь.
Но всё же, вы бы не могли помочь мне с программой ?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
16.01.2014, 04:51
Цитата Сообщение от abit Посмотреть сообщение
стандартной библиотеки C++ иначе называемой STL
совсем не так. STL - стандартная библиотека шаблонов, она входит в стандартную библиотеку, но последняя не состоит исключительно из STL. Например, iostream, string...

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

Добавлено через 4 минуты
совсем не так. STL - стандартная библиотека шаблонов, она входит в стандартную библиотеку, но последняя не состоит исключительно из STL. Например, iostream, string...
это не есть предмет о чём спорить, да iostream там вроде не входят, но всё же таки входят - http://msdn.microsoft.com/ru-r... 11816.aspx
отстаёте от жизни )
1
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
16.01.2014, 04:58
abit, старые библиотеки iostream - iostream.h, в них объекты std::cin и std::cout используют глобальное пространство имен, т.е. ::cin, ::cout. Строго говоря, там вообще нет пространства имен т.к. писались они как раз до введения namespace-ов.

http://ru.wikipedia.org/wiki/С... ка_C%2B%2B
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
16.01.2014, 05:00
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 ) ;
}
1
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 05:01  [ТС]
Цитата Сообщение от abit Посмотреть сообщение
Чем конкретно помочь? код от MrGluck очень удачен и есть решение
Проблема в том, что его код написан сложно для меня... =(
И как я проверил он выполняет немного другую функцию. Я не знаю, как в строке искать символ Пробела, и если несколько пробелов идут друг за другом , заменить их на 1. Мне бы хоть, нужные функции найти.
0
 Аватар для abit
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,859
16.01.2014, 05:06
Цитата Сообщение от clown_exe Посмотреть сообщение
Проблема в том, что его код написан сложно для меня... =(
И как я проверил он выполняет немного другую функцию. Я не знаю, как в строке искать символ Пробела, и если несколько пробелов идут друг за другом , заменить их на 1. Мне бы хоть, нужные функции найти.
скорее всего нужная вам "функция" - это std::string::find_first_of( " " ) - http://www.cplusplus.com/refer... _first_of/
от туда начинайте свои копания
1
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 05:09  [ТС]
Croessmah, Спасибо, программа работает, но функция написанная вами... не могли бы вы её пояснить построчно, немного ?
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
16.01.2014, 05:10
Цитата Сообщение от clown_exe Посмотреть сообщение
Проблема в том, что его код написан сложно для меня... =(
даже после подробнейшего объяснения и отсылкой к нормальной доке с примерами?
Да там всего 4 строки, и то вся работа программы лишь в одной, первые 3 - инициализация.
Ну пишите свои костыли и логику на if. Потом все равно поймете, что уделить 5-10 минут времени на изучение istringstream было проще.
0
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 05:12  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
Ну пишите свои костыли и логику на if. Потом все равно поймете, что уделить 5-10 минут времени на изучение istringstream было проще.
Это понятно, что было лучше. Но пока, что я умею совсем не много, в этом вся причина
0
16.01.2014, 05:16

Не по теме:

Цитата Сообщение от clown_exe Посмотреть сообщение
Но пока, что я умею совсем не много, в этом вся причина
Все время ожидая чужого решения, так ничему и не научитесь

1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
16.01.2014, 05:17
C
1
2
3
4
5
6
7
8
9
10
11
12
13
void foo ( char * dest , const char * source ) {
  for( ; (*dest=*source);++source,++dest){//Цикл пока не встретим '\0' в исходной строке
    if(*source!=' ')//Если символ не пробел, то
      continue;//Переходим к следующей итеррации
 
    //первый пробел заносим в результирующую строку
    for(*(dest++)=*(source++);*source==' ';++source)//"крутим" пока не пройдем все пробелы
      ;
    //"кидаем" символ за последовательностью пробелов в конечную строку
    if ( !(*dest=*source) ) //Если это символ '\0', 
      break;//то прекращаем цикл
  }
}
0
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 20
16.01.2014, 05:23  [ТС]
Цитата Сообщение от MrGluck Посмотреть сообщение
Все время ожидая чужого решения, так ничему и не научитесь
В то время пока я жду, я читаю о незнакомых мне функциях, я сразу попытался разобраться в том коде, который мне дали, и до сих пор читаю. Просто пока, что это сложновато понять. Слишком много информации за короткий срок. Стараюсь разобраться. Поэтому и прошу помощи, что бы пояснили код, что бы разобраться с этими элементами и в следующий раз попробовать написать так самому

Добавлено через 4 минуты
Croessmah, cпасибо, стало гораздо понятнее, но можно узнать, что означает * повсюду, какую смысловую нагрузку они несут ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.01.2014, 05:23
Помогаю со студенческими работами здесь

Сформировать новую строку, заменив в исходной строке каждую последовательность пробелов на один пробел
Помогите пожулусто решить ее! Сформировать новую строку, заменив в исходной строке каждую последовательность пробелов на один пробел

Заменить в строке последовательность пробелов на один пробел.
#include &lt;stdio.h&gt; int main() { char str; int i; gets(str);

Заменить каждую последовательность повторяющихся элементов на один элемент
Написать программы, используя очереди: 1) Создать список из целых чисел. Заменить каждую последовательность повторяющихся элементов на...

Заменить в файле каждую последовательность заданных одинаковых символов на один такой символ
Здравствуйте! Помогите поправить код! Заменить в файле каждую последовательность заданных одинаковых символов на один такой символ. ...

В тексте вставить вместо одного пробела запятую и пробел, вместо двух пробелов - двоеточие и пробел
2) В тексте вставить вместо одного пробела запятую и пробел, вместо двух пробелов - двоеточие и пробел, вместо трех и более пробелов тире...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru