C newbをもう一度返します。私はKとR Cでエクササイズに手を入れています。そしてエクササイズを試してみると、私は本当に困っています。 私の解決策は機能しますが、必ずしも正しいとは限りません。私が書いたものを洗練するための助けを求めていますか、より良い(理解しやすい!)方法があれば! マイスクリプト:配列内のユニークな要素を抽出する(KとR C ex1-14から)
#include <stdio.h>
/* How many times a character appears in an array */
main()
{
int c;
int count = 0;
int uniquecount = 0;
char array[20];
array[0] = '\0';
while((c = getchar()) != EOF)
{
array[++count] = c;
}
/* for each element in array,
* check if array[each] in newarray.
* if array[each] in newarray
* break and start checking again.
* if array[each] not in newarray
* add array[each] to end of newarray*/
printf("count = %d\n", count);
array[count] = '\0';
char newarray[count];
newarray[0] = '\0';
for(int a = 0; a < count; ++a)
{
for(int b = 0; b <= a; ++b)
{
if(newarray[b] == array[a])
break;
if(newarray[b] != array[b])
{
newarray[b] = array[b];
++uniquecount;
}
}
}
printf("uniquecount = %d\n", uniquecount);
newarray[uniquecount + 1] = '\0';
printf("array => ");
for(int i = 0; i < count; ++i)
printf("\'%c\'", array[i]);
printf("\n");
printf("newarray => ");
for(int i = 0; i < uniquecount + 1; ++i)
{
if(newarray[i] != '\0')
printf("\'%c\'", newarray[i]);
}
printf("\n");
}
私はいくつかの単純な文字列をしようとすると、それが動作し、時にはそれがdoesntの:
./times_in_array
this is
count = 9
uniquecount = 5
array => '''t''h''i''s'' ''i''s'' '
newarray => 't''h''i''s'' '
./times_in_array
something comes
count = 16
uniquecount = 11
array => '''s''o''m''e''t''h''i''n''g'' ''c''o''m''e''s'
newarray => 's''o''m''e''t''h''i''n''g'' ''c'
./times_in_array
another goes
count = 13
uniquecount = 12
array => '''a''n''o''t''h''e''r'' ''g''o''e''s'
newarray => 'a''n''o''t''h''e''r'' ''g''o''e''s'
誰かが私が間違っているところに私を導くことができますしてください?どうもありがとう!
秒は '内側のループの後もif'should。 – wildplasser