Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Как убрать лишние пробелы?

#cpp


Под лишними пробелами понимается два и более пробелов в подряд. Вот мой код: `

#include 
#include 
#include 
using namespace std;
int main()
{
    setlocale(LC_ALL, "Rus");
    cout<<"Введите строку:"<


Ответы

Ответ 1



str.erase( std::unique(str.begin(), str.end(), [](const char &a, const char &b) { return &a == &b || (a == ' ' && b == ' '); }), str.end());

Ответ 2



Регулярные выражения. Они решают все проблемы. Или удваивают их. #include #include #include int main(){ std::string str = " What is your name? "; std::cout << std::regex_replace(str, std::regex(" {2,}"), " "); } http://cpp.sh/2lbwr

Ответ 3



Вы неучли некоторые факты, pstr = str.erase(x, x); неправильно, а нужно pstr = str.erase(x + 1, 1); тоесть вы стираете следующий пробел, но я убрал всего один, так как не знаю сколько их. Поэтому это тоже неправильно... Можно например так: std::string s("you can do this for example"); std::istringstream is(s); std::string t, res; while (is >> t) res += t + ' '; std::cout << res; вот и ваш результат.

Ответ 4



Ради развлечения :) - можно пройтись посимвольно: auto dst = str.begin(); auto last = *dst; for(auto src = str.begin(); src != str.end(); last = *src++) { if (*src != last || last != ' ') { *dst++ = *src; } } str.erase(dst,str.end());

Ответ 5



Создай парсер через fstream. И переписывай посимвольно файл. Если предыдущий символ пробел и текущий то не переписывай текущий символ.

Комментариев нет:

Отправить комментарий