Используйте регулярные выражения из стандартной библиотеки.
#include <regex>
using namespace std::tr1;
Я не играл с C ++ много лет, но было бы что-то вроде этого (при условии, что вы сохранили свою строку в переменной 'str'):
std::tr1::regex rx("[0-9]..-..-");
std::string replacement = "***-**-";
std::string str2 = std::tr1::regex_search(str, rx, replacement);
На приведенный выше код ссылается с этого сайта , и вы можете проверить свои регулярные выражения с помощью этого фантастического инструмента . Я совершенно уверен, что вы хотите использовать regex_search вместо regex_replace из-за немного отличающегося способа обработки совпадений в C ++, но опять же, я некоторое время не использовал C ++, поэтому не могу сказать наверняка.
Обратите внимание, что «[0-9] ..-..-» - это регулярное выражение, которое будет соответствовать любому числовому символу, за которым следуют два символа любого типа (. Подстановочный знак), затем - -, затем еще два символа любой тип, то другой -. Таким образом, в вашем тексте он будет соответствовать только первым двум сегментам двух SSN. Затем вы заменяете числа в этом сопоставленном шаблоне звездочками.
Кроме того, поскольку это домашнее задание, я хотел бы дать вам некоторые дополнительные ресурсы, первый из которых зависит от языка:
http://softwareramblings.com/2008/07/regular-expressions-in-c.html
http://www.regular -expressions.info / reference.html
http://www.zytrax.com/tech/web/regex.htm
Кроме того, в будущем вы, вероятно, получите более полезные ответы, если будете следовать рекомендациям сообщества по заданию домашних заданий.