Я пытаюсь найти вектор строк и заменить любую пунктуацию пробелом. Компилятор не разрешит его с помощью [] [] и =. Есть ли способ сделать это? Если нет, то какая функция и параметры функции строки мне нужны? например. String.Replace(,???);
void evaluate_char(vector<string> & x)
{
string space = " ";//can I us a variable space in stead? seems not.
for(int i = 0; i < x.size(); ++i)
{
for (int j = 0; j < x[i].size(); ++j)
{
if(ispunct(x[i][j]))
x[i][j] = " ";//says something like not allowed to const char to char
}
}
}
Вы написали строковый литерал для замены, но вместо этого вы хотите использовать литерал буква, который написан с помощью одной цитаты вместо двойной кавычки.
x[i][j] = ' ';
При этом, почему бы вам не использовать std::replace_if
для замены символов в строке x[i]
?
replace_if(begin(x[i]), end(x[i]), &::ispunct, ' ');
Кроме того, с С++ 11 существует очень простой цикл для цикла. Тогда ваш код станет таким же простым:
for (auto &s : x)
replace_if(begin(s), end(s), &::ispunct, ' ');
Демонстрация: http://ideone.com/U1Nj1z
Строка состоит из символов. Поэтому вам нужно назначить ' '
(символьный литерал) вместо " "
который является строковым литералом, и типа const char*
для x[i][j]
.
Вы также можете использовать std::replace_if
в этом случае и немного std::replace_if
свой подход:
#include <string>
#include <algorithm>
template<class UnaryPredicate>
void replace_in_string_vector (std::vector<string> & string_vector, UnaryPredicate P, char const new_val)
{
for (auto & the_string : string_vector)
{
std::replace_if(the_string.begin(), the_string.end(), P, new_val);
}
}
Используется следующим образом:
replace_in_string_vector(my_vector, ispunct, ' ');
(Это может -of course- также сделать еще более общим способом. Также обратите внимание, что для цикла цикла, использующего ключевое слово auto, требуется компилятор С++ 11.)
Вам нужно использовать символ пробела, а не строку, содержащую одно пространство:
x[i][j] = ' ';
Обратите внимание на одинарные кавычки вместо двойных кавычек. Двойные кавычки указывают строковый литерал, а одинарные кавычки указывают литерал символа.
Поскольку вам нужен один символ, вам нужен последний.
Кроме того, вам не требуется string space = " ";
Вы можете безопасно удалить эту строку.