что не может взять вектор строк и заменить символ любой строки на операторы offest и assigmnet?

0

Я пытаюсь найти вектор строк и заменить любую пунктуацию пробелом. Компилятор не разрешит его с помощью [] [] и =. Есть ли способ сделать это? Если нет, то какая функция и параметры функции строки мне нужны? например. 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

            }
        }
}
Теги:
string
containers
vectorization

3 ответа

0

Вы написали строковый литерал для замены, но вместо этого вы хотите использовать литерал буква, который написан с помощью одной цитаты вместо двойной кавычки.

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

0

Строка состоит из символов. Поэтому вам нужно назначить ' ' (символьный литерал) вместо " " который является строковым литералом, и типа 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.)

0

Вам нужно использовать символ пробела, а не строку, содержащую одно пространство:

            x[i][j] = ' ';

Обратите внимание на одинарные кавычки вместо двойных кавычек. Двойные кавычки указывают строковый литерал, а одинарные кавычки указывают литерал символа.

Поскольку вам нужен один символ, вам нужен последний.

Кроме того, вам не требуется string space = " "; Вы можете безопасно удалить эту строку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню