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

Удаление пробелов в начале и конце - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.73
SKDzR
0 / 0 / 0
Регистрация: 10.01.2010
Сообщений: 91
16.07.2010, 13:33     Удаление пробелов в начале и конце #1
Подскажите, пожалуйста, функцию удаление пробелов в начеле и конце строки?
Вот примерный код:
C++
1
2
3
4
// есть строка
std::string mystr;
mystr = "  string ";
// нужно чтобы удаляло >все< пробелы в начале и конца. т.е. как в примере - 2 пробела в строке в начале нужно убрать и один завершающий строку. на выходе должно быть "string"
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2010, 13:33     Удаление пробелов в начале и конце
Посмотрите здесь:

Удаление лишних пробелов в начале и конце строки. C++
все отрицательные цифры были в начале массива, а положительные в конце C++
По двум заданным одномерным массивам формируется третий, содержащий в начале элементы первого, а в конце – элементы второго массива. C++
C++ Создание программы со своей библиотекой ( удаление элементов с N по M в строке и удаление лишних пробелов(если 2 и более оставить один))
C++ дан массив целых чисел переставить его элементы так, чтобы отрицательные оказались в начале, положительные - в конце
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
16.07.2010, 13:39     Удаление пробелов в начале и конце #2
C++
1
2
3
size_t index=0;
while((index=mystr.find(' '))!=std::string::npos)
    mystr.erase(index, 1);
.::.DIMA.::.
142 / 142 / 4
Регистрация: 26.10.2008
Сообщений: 782
16.07.2010, 13:52     Удаление пробелов в начале и конце #3
Nameless One, так удалятся все пробелы.

Можно так:
C++
1
2
3
4
5
6
string str = " a b c ";
if (str.length() > 0 && str [0] == ' ')
    str.erase (0, 1);
if (str [str.length() - 1] == ' ')
    str.erase(str.length() - 1, 1);
cout << str << endl;
Nameless One
Эксперт С++
 Аватар для Nameless One
5755 / 3404 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
16.07.2010, 14:22     Удаление пробелов в начале и конце #4
Точно, не подумал. Тогда так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
 
void deleteSpaces(std::string& string)
{
    size_t index;
    size_t strBegin=string.find_first_not_of(' ');
    size_t strEnd=string.find_last_not_of(' ');
    while(((index=string.find(' '))!=std::string::npos)&&(index<strBegin))
        string.erase(index, 1);
    while((index=string.find(' ', strEnd))!=std::string::npos)
        string.erase(index, 1);
}
 
int main(void)
{
    std::string string(" A string with spaces   ");
    std::cout << "\"" << string << "\"" << std::endl;
    deleteSpaces(string);
    std::cout << "\"" << string << "\"" << std::endl;
    system("pause");
    exit(EXIT_SUCCESS);
}
Добавлено через 16 минут
Хм... функцию deleteSpaces лучше заменить на следующюю:
C++
1
2
3
4
5
6
7
void deleteSpaces(std::string& string)
{
    size_t strBegin=string.find_first_not_of(' ');
    size_t strEnd=string.find_last_not_of(' ');
    string.erase(strEnd+1, string.size() - strEnd);
    string.erase(0, strBegin);
}
SKDzR
0 / 0 / 0
Регистрация: 10.01.2010
Сообщений: 91
16.07.2010, 14:38  [ТС]     Удаление пробелов в начале и конце #5
всем спасибо, всё получилось
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
16.07.2010, 15:10     Удаление пробелов в начале и конце #6
вот ещё до кучи
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
#include <iostream>
#include <string>
 
std::string trim(const std::string & s){
    size_t startPos = s.find_first_not_of(" \t");
    if ( startPos == std::string::npos )
        return "";
    size_t endPos = s.find_last_not_of(" \t");
    return s.substr(startPos, endPos - startPos + 1);
}
 
int main(){
    std::string buf;
    
    while ( true ){
        std::cout << "String: ";
        std::getline(std::cin, buf);
        if ( buf.empty() )
            break;
        std::cout << "Result: \"" << trim(buf) << "\"" << std::endl;
    }
    
    return 0;
}
Yandex
Объявления
16.07.2010, 15:10     Удаление пробелов в начале и конце
Ответ Создать тему
Опции темы

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