Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Kenny_Dalglish
-10 / 2 / 1
Регистрация: 08.01.2015
Сообщений: 322
Завершенные тесты: 1
#1

Удаление лишних пробелов - C++

29.08.2015, 20:06. Просмотров 521. Ответов 11
Метки нет (Все метки)

Доброго времени суток уважаемые профики С++.
Хотелось бы узнать как сделать функцию удаление лишних пробелов?
То есть что бы по 1 пробелу было, ибо у меня эти пробелы впереди у знакомого после CPU
Заранее спасибо!
http://cs622716.vk.me/v622716258/3f402/0QG1nFhAUW0.jpg - у знакомого
http://www.cyberforum.ru/cpp-beginners/thread888108.html
0
Миниатюры
Удаление лишних пробелов  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2015, 20:06
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Удаление лишних пробелов (C++):

Удаление лишних пробелов
Знаю, тема изъёрзана) но вот код, и своих функций он не выполняет( ...

Удаление лишних пробелов
И снова здравствуйте, Господа эксперты. Помогите пожалуйста Удалить в тексте...

Удаление лишних пробелов
Помогите пожалуйста с задачей: Разработать алгоритм и программу для удаления...

Удаление лишних пробелов из текста
Здравствуйте, нужна помощь в написании конечного автомата. Удаление лишних...

Удаление из текста лишних пробелов
Задание: Удалить из текста повторяющиеся знаки пробела и те пробелы, которые...

11
shmkv
652 / 371 / 57
Регистрация: 21.07.2015
Сообщений: 1,059
29.08.2015, 20:11 #2
Цитата Сообщение от Kenny_Dalglish Посмотреть сообщение
Хотелось бы узнать как сделать функцию удаление лишних пробелов?
например, так: проходишь по строке до первого символа "не пробела" и создаешь новую с текущей позиции до конца строки.
0
mymedia
193 / 193 / 120
Регистрация: 27.05.2011
Сообщений: 544
29.08.2015, 20:23 #3
http://www.cplusplus.com/faq/sequences/strings/trim/
0
Renji
2127 / 1486 / 453
Регистрация: 05.06.2014
Сообщений: 4,325
29.08.2015, 20:30 #4
C++
1
2
3
4
5
6
7
8
string str="1234      5678";
char old_char=0;
for(auto current_char:str)
{
    if(current_char!=' '||old_char!=' ')
        cout<<current_char;
    old_char=current_char;
}
0
MicM
824 / 483 / 324
Регистрация: 29.12.2009
Сообщений: 1,106
Завершенные тесты: 1
29.08.2015, 21:02 #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// Удаление пробелов в начале и конце строки
 
#include <iostream>
#include <string>
#include <boost/algorithm/string/trim.hpp>
 
int main ()
{
    std::string text = "       text     ";
    boost::algorithm::trim (text);
    std::cout << text << std::endl;
    return 0;
}
0
Геомеханик
785 / 592 / 937
Регистрация: 26.06.2015
Сообщений: 1,409
29.08.2015, 21:08 #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
char* ch_duplicate(char* s, char c){
        char* t = s, *p = s;
        while(*p){
                if(*p != c || *(p + 1) != c)
                        ++s;
                *s = *(++p);
        }
        return t;
}
 
 
int main(void){
        char s[] = "   bla     -   bla   .    1   3 ";
 
        std::cout << s << std::endl;
        std::cout << ch_duplicate(s, ' ') << std::endl;
        return 0;
}
Пример работы кода
0
Kenny_Dalglish
-10 / 2 / 1
Регистрация: 08.01.2015
Сообщений: 322
Завершенные тесты: 1
29.08.2015, 21:25  [ТС] #7
MicM, Дак это в начале и конце строки. А тут и в начале и по середине может быть.
0
Kenny_Dalglish
-10 / 2 / 1
Регистрация: 08.01.2015
Сообщений: 322
Завершенные тесты: 1
29.08.2015, 21:32  [ТС] #8
Renji, Работает! Спасибо! Но, в начале строки все равно есть пробел.
0
Миниатюры
Удаление лишних пробелов  
Kenny_Dalglish
-10 / 2 / 1
Регистрация: 08.01.2015
Сообщений: 322
Завершенные тесты: 1
29.08.2015, 21:32  [ТС] #9
Геомеханик, У меня не char. У меня string.
0
Croessmah
++Ͻ
14156 / 8081 / 1513
Регистрация: 27.09.2012
Сообщений: 19,920
Записей в блоге: 3
Завершенные тесты: 1
29.08.2015, 21:48 #10
Лучший ответ Сообщение было отмечено Kenny_Dalglish как решение

Решение

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <cctype>
#include <string>
#include <algorithm>
 
 
 
struct is_unique_space
{
    bool operator() ( char first , char second )
    {
        return first == second && std::isspace(second) ;
    }
} ;
 
 
struct is_non_space
{
    bool operator() ( char ch )
    {
        return !std::isspace(ch) ;
    }
} ;
 
 
 
 
std::string del ( std::string str )
{
    str.erase ( str.begin() , std::find_if ( str.begin() , str.end() , is_non_space () ) ) ;
    if ( !str.empty() )
    {
        str.erase ( std::unique ( str.begin() , str.end() , is_unique_space() ) , str.end() ) ;
        if ( std::isspace( str.back() ) )
        {
            str.resize ( str.size() - 1 ) ;
        }
    }
    return std::move ( str ) ;
}
 
 
 
 
 
int main()
{
    std::cout << del("    dfgfdg fdgdf   ddgdfgd     fgfd   ") << "!" << std::endl ;
}
1
Kenny_Dalglish
-10 / 2 / 1
Регистрация: 08.01.2015
Сообщений: 322
Завершенные тесты: 1
29.08.2015, 22:12  [ТС] #11
Croessmah, Огромное спасибо! Проблема решена!
0
Mr.X
Эксперт С++
3178 / 1705 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
29.08.2015, 23:17 #12
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
35
36
37
38
39
40
41
#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
/////////////////////////////////////////////////////////////////////////////////////////
void    remove_duplicate_spaces( T_str  &   s )
{
    std::istringstream  ssin(s);
    std::ostringstream  sout;
 
    std::copy
        (
            std::istream_iterator<T_str>    ( ssin      ),
            std::istream_iterator<T_str>    (),
            std::ostream_iterator<T_str>    ( sout, " " )
        );
 
    s   =   sout.str();
};
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    T_str   s   =   "    aaa   \t\n  bbb  \t  ccc  \n  ddd     \r      ";
 
    std::cout   <<  s
                <<  std::endl
                <<  std::endl
                <<  std::endl;
 
    remove_duplicate_spaces(s);
 
    std::cout   <<  s
                <<  std::endl
                <<  s.size()
                <<  std::endl;
 
    system("pause");
}
0
29.08.2015, 23:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2015, 23:17
Привет! Вот еще темы с решениями:

Рекурсия. Удаление лишних пробелов
Доброго времени суток! Подскажите как реализовать с помощью рекурсии задачу:...

Удаление лишних пробелов в конце строки
На проверочном сайте мое решение не проходит из-за лишнего пробела в выходной...

Удаление лишних пробелов в начале и конце строки.
Нужно написать функцию char*alltrim(char*string) для удаления пробелов в начале...

Удаление лишних пробелов с помощью вспомогательного массива
имеется массив. пробелов между словами в первом случае 2 во втором 3. требуется...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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