Итак, у меня есть назначение, где я должен удалить символ, если он имеет дубликаты в строке. Сейчас он делает это, но также выводит значения мусора в конце. Я не уверен, почему это так, поэтому любая помощь будет приятной. Также я не уверен, как напечатать длину новой строки.Строковый массив распечатывает значения корзины
Это мой 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
:
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++;
}
}
}
}
'строку [к + 1]; 'будет получать доступ за пределы (вызывая неопределенное поведение) в вашей функции' deleteDuplicates' – UnholySheep
Этот подход чрезвычайно неэффективен ficient. Не лучше ли сортировать или хешировать персонажей? Также почему бы не использовать что-то 'fgets' для чтения символов? – RoadRunner