#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. И переписывай посимвольно файл. Если предыдущий символ пробел и текущий то не переписывай текущий символ.
Комментариев нет:
Отправить комментарий