UPDATE:
С правкой вопрос OP, это очевидно, что он/она хочет подрезать строка знаков и символов пробела.
Как подробно описано в помеченном возможном дубликате, один из способов заключается в использовании remove_copy_if
:
string test = "THisisa test;;';';';";
string temp, finalresult;
remove_copy_if(test.begin(), test.end(), std::back_inserter(temp), ptr_fun<int, int>(&ispunct));
remove_copy_if(temp.begin(), temp.end(), std::back_inserter(finalresult), ptr_fun<int, int>(&isspace));
ORIGINAL
Рассматривая свой вопрос, заменяющих пространств с пробелами избыточны, так что вам действительно нужно понять out как заменить знаки препинания пробелами. Вы можете сделать это, используя функцию сравнения (путем оборачивания std::ispunct
) в тандеме с std::replace_if
из STL:
#include <string>
#include <algorithm>
#include <iostream>
#include <cctype>
using namespace std;
bool is_punct(const char& c) {
return ispunct(c);
}
int main() {
string test = "THisisa test;;';';';";
char test2[] = "THisisa test;;';';'; another";
size_t size = sizeof(test2)/sizeof(test2[0]);
replace_if(test.begin(), test.end(), is_punct, ' ');//for C++ strings
replace_if(&test2[0], &test2[size-1], is_punct, ' ');//for c-strings
cout << test << endl;
cout << test2 << endl;
}
Воспроизводит:
THisisa test
THisisa test another
Что такое «пустой символ»? – Angew
@Angew Удаленный один)) –
@ jrd1 Нет, это не обман (особенно не относительно принятого ответа там)! Нет необходимости в _'shrinking'_ или динамическом изменении размера массива, см. Мой ответ и другие комментарии вниз ... –