Заменить все средние символы в строке c ++ - PullRequest
0 голосов
/ 20 марта 2012

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

// finds all banned words
size_t pos = textWords[i].find(bannedWords[j]); 

// checks through the vector to find all words in the banned list
if (string::npos != pos) 
{
    // replaces the middle character with a *
    textWords[i].replace(pos + 1 , 1 , 1 , '*'); 
}

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

Опять прошу прощения за вопрос, аналогичный тому, который я задавал ранее, но я застрял с этим.

Ответы [ 3 ]

4 голосов
/ 20 марта 2012

Пример использования std::string::replace (используется первый из 5-го варианта на связанной странице):

std::string s = "a-test-string";
s.replace(1, s.length() - 2, s.length() -2, '*');
1 голос
/ 20 марта 2012

Используйте перегрузку std::string::replace, которая принимает один символ и дублирует его указанное количество раз.

#include <string>
#include <iostream>

int main()
{
  std::string s( "expletive" );

  s.replace( 1, s.size() - 2, s.size() - 2, '*' );
  std::cout << s << std::endl;
  return 0;
}

Выход:

e*******e
1 голос
/ 20 марта 2012

Если вы прочитаете документацию по std::string::replace, вы увидите, что используемый вами вызов

textWords[i].replace(pos + 1 , 1 , 1 , '*');

означает «заменить 1 символ, начинающийся с позиции pos + 1, на один символ« * »», если вы хотите изменить все буквы, кроме первой и последней, вы должны использовать

textWords[i].replace(pos + 1 , bannedWords[j].size()-2 , bannedWords[j].size()-2 , '*');

То есть, изменить bannedWords[j].size()-2 символов в textWords[i] для bannedWords[j].size()-2 '*' символов.

...