#cpp #строки
Как сделать пропуск лишних пробелов для введенного текста? Получилось написать для заданного. #includeusing namespace std; #include #include void main() { setlocale(0, "rus"); char nach1[] = "Its me Dio "; char con1[50]; int jj = 0; for (int i = 0; i < strlen(nach1 - 1); i++) { if (nach1[i] == ' ' && nach1[i + 1] == ' ')continue; con1[jj] = nach1[i], jj++; } con1[jj] = 0; char* vr = con1; if (con1[0] == ' ')vr++; cout << vr << endl << endl; _getch(); }
Ответы
Ответ 1
Примерно так: void removeSpaces(std::string& str) { for (std::string::iterator it = str.begin(); it != str.end(); it++) { std::string::iterator begin = it; while (it != str.end() && ::isspace(*it) )it++; if (it - begin > 1) it = str.erase(begin + 1, it) - 1; } } Вход: str sdfg f Выход: str sdfg fОтвет 2
Как ни странно, но это также можно сделать с помощью стандартной библиотеки, используя функцию std::unique_copy/4. Пример: #include#include #include #include void remove_spaces(std::string& str) { str.erase( std::unique_copy(str.begin(), str.end(), str.begin(), [](char c1, char c2){ return c1 == ' ' && c2 == ' '; }), str.end()); } int main() { std::string s1 = "The string with many spaces!"; std::cout << "before: " << s1 << '\n'; remove_spaces(s1); std::cout << "after: " << s1 << '\n'; }
Комментариев нет:
Отправить комментарий