3 つの C スタイルの文字列を受け取り、C スタイルの文字列を返す関数を作成しようとしています。この関数は、サブストリングのすべての出現について c-string を検索し、それらを別のストリングに置き換えます。
このプログラムは機能しますが、非常に洗練されていないようです。もっとかさばらない方法でできたような気がして仕方がありません。
char* replaceSubstring(char *original, char *from, char *to)
{
int origlen = strlen(original);
int i = 0;
int count = 0;
char *ptr;
//figure out how many times the sub-string occurs in a string.
//i couldn't figure out a way to avoid this loop
while (i<origlen)
{
ptr = strstr(original+i, from);
if (!ptr)
break;
else
{
i = ptr - original + 1;
count++;
}
}
//figure out what the size of the output string has to be
int newsize = origlen + (strlen(to) - strlen(from)) * count;
char *newstring = new char[newsize];
newstring[0] = '\0';
i = 0;
while (i < origlen)
{
ptr = strstr(original+i, from);
if (!ptr)
{
strcat(newstring,original+i);
break;
}
else
{
//this looks extremely ugly and bulky...
strncat(newstring, original+i, ptr-(original+i));
strcat(newstring, to);
i = i + ptr - (original + i) + strlen(from);
}
}
strcat(newstring,"\0");
return newstring;
}
このコードをより明確かつ/またはより効率的にする方法について誰か提案がありますか? どんなコメントでも大歓迎です。代わりにクラス文字列を使用することを提案しないでください。それはオプションではありません。関数は c-strings で動作する必要があります