總的來說,除了一部分之外,代碼都在作業。代碼首先按字母順序輸出排序的字串。然后洗掉重復的字符,因此每個字母只顯示一次。我的問題是當我輸入“資料結構”時它顯示acdersttu,但我應該有acderstu,這意味著只有一個 t. 問題出在哪里?我的代碼:
#include <stdio.h>
#include <string.h>
int main ()
{
char str[100];
int freq[256] = {0};
char temp;
int i, j, k;
printf("\nEnter the string: ");
scanf("%s",str);
int n = strlen(str);
for (i = 0; i < n; i ) {
for (j = i 1; j < n; j ) {
if (str[i] > str[j]) {
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
}
printf("The sorted string is: %s", str);
for(i = 0; i < n; i )
for(j = i 1; str[j] != '\0'; j )
if(str[j] == str[i])
for(k = j; str[k] != '\0'; k )
str[k] = str[k 1];
printf("\nThe sorted string after removing same characters is: %s ", str);
return 0;
}
uj5u.com熱心網友回復:
您定義的規則僅在有 2 個重復字符時才適用,因為有 3 個 t,所以它不能正常作業。下面的代碼是第二個回圈的更改。
for(i = 0; i < n; i )
for(j = i 1; str[j] != '\0'; j )
if(str[j] == str[i]){
for(k = j; str[k] != '\0'; k )
str[k] = str[k 1];
j=j-1;
}
printf("\nThe sorted string after removing same characters is: %s ", str);
return 0;
uj5u.com熱心網友回復:
洗掉相鄰重復字符的另一種方法是使用單個回圈而不是三個嵌套回圈:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* Remove adjacent duplicate characters */
static void remove_duplicates(char *str)
{
char *src = str;
char *dst = str;
char c = *dst = *src ;
while (c != '\0')
{
c = *src ;
if (c != *dst)
* dst = c;
}
}
/* Comparison function for qsort() - comparing characters */
static int cmp_char(const void *v1, const void *v2)
{
int c1 = (unsigned char)*(const char *)v1;
int c2 = (unsigned char)*(const char *)v2;
return c1 - c2;
}
static void test(char *str)
{
size_t length = strlen(str);
printf("Before sort (%zu): [%s]\n", length, str);
qsort(str, length, sizeof(char), cmp_char);
printf("After sort (%zu): [%s]\n", strlen(str), str);
remove_duplicates(str);
printf("After removing duplicates (%zu): [%s]\n", strlen(str), str);
}
int main(void)
{
char str1[] = "datastructures";
test(str1);
char str2[] = "aaaaaaaaaaa";
test(str2);
char str3[] = "dbca";
test(str3);
char str4[] = "z";
test(str4);
char str5[] = "";
test(str5);
return 0;
}
輸出
Before sort (14): [datastructures]
After sort (14): [aacderrsstttuu]
After removing duplicates (8): [acderstu]
Before sort (11): [aaaaaaaaaaa]
After sort (11): [aaaaaaaaaaa]
After removing duplicates (1): [a]
Before sort (4): [dbca]
After sort (4): [abcd]
After removing duplicates (4): [abcd]
Before sort (1): [z]
After sort (1): [z]
After removing duplicates (1): [z]
Before sort (0): []
After sort (0): []
After removing duplicates (0): []
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/427494.html
