1.原理を理解する
文字配列 abbbcaddd がある場合、この配列に冗長な同じ文字を削除させ、最後に abcd を削除させるにはどうすればよいですか?
ここでは、最初に sizeof を使用して配列のサイズを計算し、次に sizeof を介して文字サイズの値で割り、文字が持つ要素の数を計算します。
1 つ目は、2 つの for ループをトラバースし、内側のレイヤーから外側のレイヤーまでトラバースして、どの文字が同じかを見つけることです。
外側の層が a を見つけた後、内側のループはそれぞれを検索しますが、見つかった最初の値は削除できないため、内側のループの値が外側のループの値 + 1 の場合、つまり:
次に、2 つの同一の文字が見つかったら、それらを引き続き検索して削除する必要があります。3 つの b があるため、1 つだけを削除することはできないため、次のようになります。
次に、文字が削除されるたびに、配列の値を減らすことができます。コードは次のとおりです。
#include<stdio.h>
int main()
{
char words[] = "abbbcadddd";
int len = sizeof(words) / sizeof(words[0]);
for (int i = 0; i < len-1; i++)
{
for (int k = i + 1; k < len - 1;)
{
if (words[i] == words[k])
{
for (int t = k; t < len - 1; t++)
{
words[t] = words[t+1];
}
len--; //数组的长度-1
}
else
{
k++;
}
}
}
puts(words);
return 0;
}