Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/531: Рейтинг темы: голосов - 531, средняя оценка - 4.63
 Аватар для qwertytol
7 / 7 / 2
Регистрация: 20.02.2009
Сообщений: 116

Удалить лишние пробелы в строке

16.05.2010, 08:35. Показов 106626. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Прошу написать простую программу по заданию: В строке, введённой с клавиатуры, удалить все лишние пробелы.
На форуме толкового ничего не нашел. Заранее благодарю.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.05.2010, 08:35
Ответы с готовыми решениями:

Удалить в строке все лишние пробелы, то есть серии подряд идущих пробелов заменить на одиночные пробелы
Я уже решал эту задачу с помощью циклов и символьных массивов, и выкладывал на этот форум , но я не знаю как решить её , с помощью типа...

Удалить лишние пробелы в строке
Дано строку. Удалить лишние пробелы.

Удалить лишние пробелы в строке
удаление лишних пробелов в тексте

41
 Аватар для RUSya82
242 / 120 / 14
Регистрация: 15.10.2010
Сообщений: 395
25.11.2010, 14:15
Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
 
using namespace std;
 
int main()
{
        int i, j, len;
        char *text = new char[255];
        cout << "Input the text: ";
        cin.getline (text, 255);
        len = strlen (text);
        //cout << len;
        for (i=0; i<len; i++)
                if ((*(text+i) == ' ') && (*(text+i+1) == ' '))
                {
                   //cout << "i = " << i << endl;
                        for (j=i; j<len; j++){
                                *(text+j) = *(text+j+1);
                                }
                                len--;
                                i--;
                }
        cout << "Text is: " << text;
        delete [] text;
        getch();
        return 0;
}
2
1 / 1 / 0
Регистрация: 01.04.2013
Сообщений: 73
23.05.2014, 19:09
вот рабочий код, у меня строка считывается из Memo2 и записывается туда же
C++
1
2
3
4
5
6
7
8
  st=Memo2->Lines->Text;
  n=st.Length();
for(r=1;r<n;r++)
    {
if(st[r] == ' ' && st[r+1] == ' ' && st[r+1] != '\0') {for(int j=r;j<n;j++) st[j]=st[j+1]; r=r-1;}
   }
Memo2->Clear();
Memo2->Lines->Add(st);
0
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 6
23.05.2014, 20:19
Вот подходящая тема, может поможет.
Удаление лишних пробелов в строке
0
 Аватар для Magister Yoda
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 2
26.08.2016, 18:00
Всё перепробовал, ничего не работает, и вот в инете нарыл функцию которая удаляет пробелы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void compactString(char* str) 
{ 
    char* pStr = str; 
    while(*str != '\0') 
    { 
        if(*str != ' ') 
        { 
            *pStr = *str; 
            *pStr++; 
        } 
        str++; 
    } 
    *pStr = '\0'; 
}
0
26.08.2016, 18:03

Не по теме:

Magister Yoda, щас бы некропостить в 2016

0
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
26.08.2016, 18:29
Найдите отличие:
Цитата Сообщение от Magister Yoda Посмотреть сообщение
функцию которая удаляет пробелы:
Цитата Сообщение от qwertytol Посмотреть сообщение
удалить все лишние пробелы
Уже видно, что эта функция не решает поставленную задачу.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
27.08.2016, 10:19
Идиотизм какой-то! Автор требует решения на Си, все отвечающие пишут решения на Си, однако все дружно помечают свою сишню тегом С++ и все это безобразие находится в плюсовом разделе!
Мне кажется, логичнее переместить тему в сишный.
0
 Аватар для Martein
704 / 109 / 21
Регистрация: 22.06.2014
Сообщений: 241
27.08.2016, 11:03
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <vector>
#include <string>
 
int main(int /*argc*/, char** /*argv*/)
{
 
    std::vector<std::string> words;
    std::string word;
    while(std::cin >> word) words.push_back(word);
    for (auto& word : words) std::cout << word << " ";
    return 0;
}
Ввод всего текста заканчивать последовательным нажатием Enter -> Ctrl+Z -> Enter. Это ввод EOF - символа окончания потока строки/файла. Тут мы считываем из потока ввода слова, каждое отдельно в контейнер-вектор. Потом в цикле просто делаем его вывод через пробел. Фактически пробелы присутствуют только при выводе, а в памяти они не хранятся. Задача состоит в том, чтобы найти слова, а не пробелы в тексте.
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
27.08.2016, 11:11
qwertytol,
а не проще так?
C++
1
MoveX->Text = StringReplace(MoveX->Text, "  ", " ", TReplaceFlags() << rfReplaceAll);
то есть два пробела заменить на один во всем тексте.
и если в тексте 3.4.5 ... и тд. пробелов то replace все уровняет до одного пробела.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
27.08.2016, 13:07
Цитата Сообщение от lifeforce Посмотреть сообщение
а не проще так?
Мне кажется, мой вариант проще, он позволяет заменить на один пробел последовательность любых пробельных символов, а не только пробелов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <sstream>
#include <string>
///////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
///////////////////////////////////////////////////////////////////////////////
T_str   get_normalized_string( T_str    const   &   s )
{
    T_str               res;
    T_str               word;
    std::istringstream  ssin(s);
 
    while( ssin >>  word )
    {
        res     +=  ' ';
        res     +=  word;
    }
 
    res.erase(0, 1);
 
    return  res;
}
///////////////////////////////////////////////////////////////////////////////
int     main()
{
    T_str   s   =   "aaa  bbb\t\t\tccc\n\n\nddd\r\r\reee";
 
    std::cout   <<  s
                <<  std::endl
                <<  std::endl;
 
    std::cout   <<  get_normalized_string( s )
                <<  std::endl;
}
2
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
01.09.2016, 07:46
Mr.X,
В случае если заменять все символьные пробелы то твой вариант - великолепен.
я предложил только если надо пробелы сократить. - т.е. самый короткий код.
0
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
01.09.2016, 09:38
Спёр у модератора Croessmah.
Надеюсь, воровство у модераторов не нарушает правила?
C++
1
2
3
4
5
6
7
8
void Trim_SD(char * dest, char * source){
    for(char *p1=source,*p2=dest; (*p2=*p1);++p1,++p2){
        if(*p1!=' ') continue;
        for(;*p1==' ';++p1);
            p2+=(p2==dest || !(*p1))?0:1;
            *p2=*p1;
    }
}
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
01.09.2016, 10:35
HelicopterK52, так це ж на Си!
0
829 / 253 / 34
Регистрация: 27.07.2016
Сообщений: 497
Записей в блоге: 1
01.09.2016, 10:40
Цитата Сообщение от Mr.X Посмотреть сообщение
так це ж на Си!
Пусть будет.
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
01.09.2016, 15:29
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <regex>
#include <string>
int main()
{
    std::string s;
    std::getline(std::cin, s);
 
    s = std::regex_replace(s, std::regex("[ ]+"), " ");
    std::cout << s;
}
Если заменять все пробелы (табуляцию и пр.):
C++
1
s = std::regex_replace(s, std::regex("[[:space:]]+"), " ");
0
0 / 0 / 0
Регистрация: 23.11.2015
Сообщений: 6
07.03.2017, 02:53
В свое время сталкивался с подобными трудностями.
реализовал через двойной цикл:
C++
1
2
3
4
5
6
        for (int i = 0; i < s.length(); i++)
        {
            if ((s[i] == ' ') && (s[i + 1] == ' '))
                for (int j = i+1; j < s.length(); j++)
                    if (s[j] == ' ') { s.erase(j, 1); j--;}
        }
0
07.03.2017, 12:14

Не по теме:

Сейчас бы в 2017, отвечать на тему, созданную в 2010... :D

0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
07.03.2017, 12:35
 Комментарий модератора 
YaPavel, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.9 (порядок оформления кода).

.
0
1 / 1 / 0
Регистрация: 06.03.2017
Сообщений: 109
16.10.2017, 20:06
Цитата Сообщение от ***GIN*** Посмотреть сообщение
res.push_back(buf[i]);
я думал так только с вектором можно делать
0
2 / 1 / 1
Регистрация: 26.10.2018
Сообщений: 2
26.10.2018, 16:41
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<iostream>
#include<string>
using namespace std;
 
string Del(string,char);
 
int main()
{
    int i = 0;
     string str1="Hello my     name            is   Jon";
     string str2;
 
     cout << str1 << endl;
     str2 = Del(str1, ' ');//Поверне: "Hello my name is Jon"
 
    cout<< str2<<endl;
    
    system("pause");
    return 0;
}
string Del(string str,char symvol)
{   
    for (int j = 0; j < str.size(); j++)
    {
        for (int i = 0; i < str.size(); i++)
        {
            if ((str[i] == symvol) && (str[i+1] == symvol))
            {
                str.erase(i, 1);
            }
        }
    }
    return str;
Якщо замість пробілу поставити у виклику функції інший символ то можна видаляти "зайві" символи
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.10.2018, 16:41

Удалить лишние пробелы в строке
Здравствуйте, не работает код по даной задачке: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main() { ...

В символьной строке удалить все лишние подряд идущие пробелы.
помогите пожалуйста написать программу:В символьной строке удалить все лишние подряд идущие пробелы.

В символьной строке удалить все лишние подряд идущие пробелы.
Помогите пожалуйста написать программу,Каким образом можно осуществить: В символьной строке удалить все лишние подряд идущие пробелы?

Удалить в строке лишние пробелы, оставив между словами ровно по одному
Дана строка состоящая из слов, между которыми есть некое количество пробелов. Требуется удалить лишние пробелы, оставив между словами...

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни 1. Механизм отложенного высвобождения фосфора Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ Реализована разная скорость. . .
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2. Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её. Всё это стресс конечно. Почему?. . .
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот. Ларри Уингет
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru