文字列に重複がある場合は、文字を削除する必要があります。今ではそれを行いますが、最後にゴミ箱の値を表示します。なぜそれがそれを行うかわからないので、どんな助けもいいと思う。 また、新しい文字列の長さをどのように出力するべきかわかりません。文字列配列はゴミ値を出力します
これは私のmain.c
ファイルです:
#include <stdio.h>
#include <string.h>
#include "functions.h"
int main() {
char string[256];
int length;
printf("Enter char array size of string(counting with backslash 0): \n");
/*
Example: The word aabc will get a size of 5.
a = 0
a = 1
b = 2
c = 3
/0 = 4
Total 5 slots to allocate */
scanf("%d", &length);
printf("Enter string you wish to remove duplicates from: \n");
for (int i = 0; i < length; i++)
{
scanf("%c", &string[i]);
}
deleteDuplicates(string, length);
//String output after removing duplicates. Prints out trash values!
for (int i = 0; i < length; i++) {
printf("%c", string[i]);
}
//Length of new string. The length is also wrong!
printf("\tLength: %d\n", length);
printf("\n\n");
getchar();
return 0;
}
出力正しくない文字列の末尾のprintf("%c", string[i]);
プリントアウトゴミ値から。
deleteDuplicates機能はfunctions.c
ファイルに次のようになります。デフォルトでは、参照渡していないCで
void deleteDuplicates(char string[], int length)
{
for (int i = 0; i < length; i++)
{
for (int j = i + 1; j < length;)
{
if (string[j] == string[i])
{
for (int k = j; k < length; k++)
{
string[k] = string[k + 1];
}
length--;
}
else
{
j++;
}
}
}
}
'文字列[Kここで
は、ハッシュのこの考えを示し、私はしばらく前に書いたいくつか変更されたコードです+ 1]; 'このアプローチは非常にinefあるご' deleteDuplicates'機能 – UnholySheepに(未定義の動作を引き起こす)範囲外にアクセスします不完全な文字を並べ替えたりハッシュしたりするほうが良いのではないでしょうか?また、 'fgets'を使って文字を読むのはなぜですか? – RoadRunner