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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 104, средняя оценка - 4.69
qwertytol
5 / 5 / 0
Регистрация: 20.02.2009
Сообщений: 116
#1

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

16.05.2010, 08:35. Просмотров 15275. Ответов 37
Метки нет (Все метки)

Добрый день. Прошу написать простую программу по заданию: В строке, введённой с клавиатуры, удалить все лишние пробелы.
На форуме толкового ничего не нашел. Заранее благодарю.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2010, 08:35     Удалить лишние пробелы в строке
Посмотрите здесь:

В символьной строке удалить все лишние подряд идущие пробелы. C++
В символьной строке удалить все лишние подряд идущие пробелы. C++
C++ Удалить из текста лишние пробелы
Удалить лишние пробелы C++
Строка: удалить лишние пробелы и определить слово с минимальным кол-вом согласных в строке C++
Удалить лишние пробелы C++
Удалить все лишние пробелы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RUSya82
236 / 114 / 3
Регистрация: 15.10.2010
Сообщений: 395
25.11.2010, 14:15     Удалить лишние пробелы в строке #21
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;
}
goodjob
1 / 1 / 1
Регистрация: 01.04.2013
Сообщений: 71
23.05.2014, 19:09     Удалить лишние пробелы в строке #22
вот рабочий код, у меня строка считывается из 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);
I_am_Max
0 / 0 / 0
Регистрация: 18.05.2014
Сообщений: 6
23.05.2014, 20:19     Удалить лишние пробелы в строке #23
Вот подходящая тема, может поможет.
Удаление лишних пробелов в строке
Magister Yoda
0 / 0 / 0
Регистрация: 24.02.2016
Сообщений: 2
26.08.2016, 18:00     Удалить лишние пробелы в строке #24
Всё перепробовал, ничего не работает, и вот в инете нарыл функцию которая удаляет пробелы:
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'; 
}
obivan
26.08.2016, 18:03
  #25

Не по теме:

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

HelicopterK52
650 / 193 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
26.08.2016, 18:29     Удалить лишние пробелы в строке #26
Найдите отличие:
Цитата Сообщение от Magister Yoda Посмотреть сообщение
функцию которая удаляет пробелы:
Цитата Сообщение от qwertytol Посмотреть сообщение
удалить все лишние пробелы
Уже видно, что эта функция не решает поставленную задачу.
Mr.X
Эксперт С++
3040 / 1685 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
27.08.2016, 10:19     Удалить лишние пробелы в строке #27
Идиотизм какой-то! Автор требует решения на Си, все отвечающие пишут решения на Си, однако все дружно помечают свою сишню тегом С++ и все это безобразие находится в плюсовом разделе!
Мне кажется, логичнее переместить тему в сишный.
Martein
Оператор ЭВМ 6 разряда
666 / 77 / 13
Регистрация: 22.06.2014
Сообщений: 169
27.08.2016, 11:03     Удалить лишние пробелы в строке #28
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 - символа окончания потока строки/файла. Тут мы считываем из потока ввода слова, каждое отдельно в контейнер-вектор. Потом в цикле просто делаем его вывод через пробел. Фактически пробелы присутствуют только при выводе, а в памяти они не хранятся. Задача состоит в том, чтобы найти слова, а не пробелы в тексте.
lifeforce
111 / 71 / 15
Регистрация: 27.09.2010
Сообщений: 528
27.08.2016, 11:11     Удалить лишние пробелы в строке #29
qwertytol,
а не проще так?
C++
1
MoveX->Text = StringReplace(MoveX->Text, "  ", " ", TReplaceFlags() << rfReplaceAll);
то есть два пробела заменить на один во всем тексте.
и если в тексте 3.4.5 ... и тд. пробелов то replace все уровняет до одного пробела.
Mr.X
Эксперт С++
3040 / 1685 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
27.08.2016, 13:07     Удалить лишние пробелы в строке #30
Цитата Сообщение от 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;
}
lifeforce
111 / 71 / 15
Регистрация: 27.09.2010
Сообщений: 528
01.09.2016, 07:46     Удалить лишние пробелы в строке #31
Mr.X,
В случае если заменять все символьные пробелы то твой вариант - великолепен.
я предложил только если надо пробелы сократить. - т.е. самый короткий код.
HelicopterK52
650 / 193 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
01.09.2016, 09:38     Удалить лишние пробелы в строке #32
Спёр у модератора 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;
    }
}
Mr.X
Эксперт С++
3040 / 1685 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
01.09.2016, 10:35     Удалить лишние пробелы в строке #33
HelicopterK52, так це ж на Си!
HelicopterK52
650 / 193 / 28
Регистрация: 27.07.2016
Сообщений: 475
Завершенные тесты: 1
01.09.2016, 10:40     Удалить лишние пробелы в строке #34
Цитата Сообщение от Mr.X Посмотреть сообщение
так це ж на Си!
Пусть будет.
avgoor
880 / 515 / 111
Регистрация: 05.12.2015
Сообщений: 1,457
01.09.2016, 15:29     Удалить лишние пробелы в строке #35
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:]]+"), " ");
YaPavel
0 / 0 / 0
Регистрация: 23.11.2015
Сообщений: 6
07.03.2017, 02:53     Удалить лишние пробелы в строке #36
В свое время сталкивался с подобными трудностями.
реализовал через двойной цикл:
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--;}
        }
Captain Maxee
07.03.2017, 12:14
  #37

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2017, 12:35     Удалить лишние пробелы в строке
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
gru74ik
Модератор
Эксперт CЭксперт С++
3924 / 1682 / 189
Регистрация: 20.02.2013
Сообщений: 4,742
Записей в блоге: 21
07.03.2017, 12:35     Удалить лишние пробелы в строке #38
 Комментарий модератора 
YaPavel, пожалуйста, прочитайте правила форума.
Особое внимание обратите на пункт 4.9 (порядок оформления кода).

.
Yandex
Объявления
07.03.2017, 12:35     Удалить лишние пробелы в строке
Ответ Создать тему
Опции темы

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