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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
o33ik
138 / 5 / 1
Регистрация: 25.03.2013
Сообщений: 228
14.06.2013, 00:42     Удалить лишние пробелы #1
Сделал програму для удаления лишних пробелов из строки(те что стоят в начале строки, в конце, все кроме одного между словами). Програма вроде работает, но если количесто пробелов(во всей строке) будет больше 5 то появляеться ошибка. Если до 5 то все нормально переделавает. Как решить ету проблему?
Кликните здесь для просмотра всего текста
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 <iostream>
#include <string>
 
using namespace std;
 
void delete_spaces(string &str)
{
    int size = str.length();
    //cout << size << endl;
    for(int j = 0; j < size - 1; j++)
    {
        for(int i = 0; i < j - 1; i++)
        {
            if(str[i] == ' ' && str[i+1] == ' ')
            {
                str.erase(str.begin() + i);
            }
            else if(str[0]== ' ')
            {
                str.erase(str.begin());
            }
            else if(str[i] == '\0' && str[i-1]== ' ')
            {
                str.erase(str.end() - 1);
            }
        }
    }
    cout << str << endl;
}
 
void main()
{
    while(true)
    {
        string str;
        cout << "Enter your str" << endl;
        getline(cin, str);
        delete_spaces(str);
        system("pause");
    }
}
Миниатюры
Удалить лишние пробелы  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sinewy
3 / 3 / 0
Регистрация: 02.06.2013
Сообщений: 14
14.06.2013, 01:13     Удалить лишние пробелы #2
я бы сейчас решил это вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
void delete_spaces(string &str)
{
    for(int i =0; i<str.size()-1;)
        if(str[i]==' '&& str[i+1]==' ')
            str.erase(i,1); else i++;
    if(str[0] == ' ')
        str.erase(0,1);
    if(str[str.size()-1]==' ')
        str.erase(str.size()-1,1);
    cout << str <<endl;
}
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
14.06.2013, 01:24     Удалить лишние пробелы #3
o33ik, не совсем понял ваш код. В лоб:
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
#include <iostream>
#include <algorithm>
#include <string>
 
 
void trim_left(std::string & str) {
   str.erase(str.begin(), str.begin() + str.find_first_not_of(" "));
}
 
void trim_right(std::string & str) {
   str.erase(str.begin() + str.find_last_not_of(" "), str.end());
}
 
void trim(std::string & str) {
   trim_left(str);
   trim_right(str);
}
 
bool is_adjacent_space(char const lhs, char const rhs) {
   return ((lhs == ' ') && (rhs == ' '));
}
 
void delete_spaces(std::string & str) {
   trim(str);
   str.erase(std::unique(str.begin(), str.end(), is_adjacent_space), str.end());
}
 
 
int main() {
   std::string str;
   std::cout << "Enter your str" << std::endl;
   getline(std::cin, str);
   delete_spaces(str);
   std::cout << "'" << str << "'" << std::endl;
}
http://ideone.com/nr7t1t
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
14.06.2013, 01:39     Удалить лишние пробелы #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <iterator>
 
typedef std::istream_iterator<std::string> input_str;
typedef std::ostream_iterator<std::string> output_str;
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
    std::istringstream ist(str);
    std::copy(input_str(ist), input_str(), output_str(std::cout, " ") );
}
Yandex
Объявления
14.06.2013, 01:39     Удалить лишние пробелы
Ответ Создать тему
Опции темы

Текущее время: 21:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru