Как заменить строку между двумя подстроками в строке в VC ++ / MFC? - PullRequest
2 голосов
/ 07 января 2010

Допустим, у меня есть объект CString strMain = "AAAABBCCCCCCDDBBCCCCCCDDDAA"; У меня также есть две меньшие строки, скажем strSmall1 = "BB"; strSmall2 = "DD"; Теперь я хочу заменить все вхождения строк между strSmall1 ("BB") и strSmall2 ("DD") в strMain, скажем, "KKKKKKK"

Есть ли способ сделать это без Regex. Я не могу использовать регулярные выражения, так как добавление другого файла в проект запрещено.

Есть ли способ в VC ++ / MFC сделать это? Или какой-нибудь простой алгоритм, на который вы можете указать мне?

Ответы [ 3 ]

3 голосов
/ 07 января 2010
int length = strMain.GetLength();
int begin = strMain.Find(strSmall1, 0) + strSmall1.GetLength();
int end = strMain.Find(strSmall2, 0);

CStringT left = strMain.Left(begin);
CStringT right = strMain.Right(length - end);

strMain = left + "KKKKKKK" + right
1 голос
/ 07 января 2010

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

Это, конечно, предполагает, что вы хотите заменить все вхождения в основной строке - если вы хотите заменить только первое, решение Джона Уэлдона (для одного примера) будет работать очень хорошо.

1 голос
/ 07 января 2010

psudocode:

loop over string
  if curlocation matches string strsmall1 save index break

loop over remaining string
  replace till curlocation matches string strsmall2

Дополнительный кредит:

Каким будет следующее задание?

Мой ответ:

Ускорьте его, перепрыгнув длину strsmall1 и strsmall2 в итерациях цикла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...