私は、指定された文字列からすべての重複する文字を再帰的に削除する再帰関数を作成しようとしています。 たとえば、 "Hello world" - > "Helo wrd"などです。私が持っている重複した文字を再帰的に削除する
制限はありません:許可
- ませループ。
- 元の関数(remove_duplicates)に引数を追加することはできません。
- string.hのライブラリの関数は使用できませんが、再帰的に書き込むことはできます。
もう1つの補助的な再帰関数を使用することができます。
私がこれまでに書いた関数は、短い文字列に対してしか機能しません。関数を何度も呼び出します。それをより効率的にする方法は?あなたは結果の文字列を格納するグローバル変数を使用できる場合
void remove_duplicates3(char string[], int index)//(str,RecursiveStrlen(str, 0)-1)
{
int length = RecursiveStrlen(string + 1, 0);
if (string[index] == '\0' || index == 0)
{
return;
}
if (string[0] != string[index])
{
remove_duplicates3(string, index - 1);
}
else
{
BackspaceString(string, index);
remove_duplicates3(string, length - 1);
}
remove_duplicates3(string + 1, length - 1);
}
int RecursiveStrlen(char str[], int index)
{
if (str[index] == '\0')
return index;
return RecursiveStrlen(str, index + 1);
}
void BackspaceString(char string[],int index)//deletes one char from string in a specific index
{
if (string[index] == '\0')//end of string
return;
string[index] = string[index + 1];
BackspaceString(string, index + 1);
}
サイドの質問:あなたは、文字列の長さに制限がありますか?再帰を使用すると、何度もやりすぎると酸味が出る可能性があるためです。 – rbaleksandar
はい、制限は256文字です。 – bar