我想建立自己的功能,刪除重複的字符會幫助你實現你正在嘗試做的。但是,沒有標準函數可以幫助您從字符串中刪除所有重複項。因此,請嘗試構建一個函數來從字符串中刪除所有重複/重複的字符並返回該字符串。這是你的功能是什麼樣子:
char* remove_duplicated(char* str, int size) {
int frequency[256] = {0};
char* new_str = malloc(size);
int new_size = 0;
for(int i=0; str[i]!='\0'; i++)
{
if(frequency[(unsigned char) str[i]] == 0) {
frequency[(unsigned char) str[i]]++;
new_str[new_size] = str[i];
new_size++;
}
}
new_str[new_size] = '\0';
return new_str;
}
一旦你已經構建了上述功能,在發送要具有測量字符的頻率和存儲返回字符串的字符串。事情是這樣的:
char* new_str = remove_duplicated(str, size);
現在在雙for
循環,你正在使用,使用new_str
爲您外for循環,還可以使用它爲for
循環顯示count
for(i=0; new_str[i]!='\0'; i++)
{
for(j=0; str[j]!='\0'; j++)
{
if(new_str[i] == str[j])
count[i]++;
}
}
for(i=0; new_str[i]!='\0'; i++)
printf("%c occurs %d times \n", new_str[i], count[i]);
不要忘記釋放remove_duplicated函數中的mableced數組:
free(new_str);
這是一個在線演示:https://ideone.com/KnkwGX
'count'的定義是什麼?你的代碼實際上是計算完全隨機的東西你不需要內部循環,但是你需要一個計數數組,其索引是'str [i]' - 字符串中第i個字符的ASCII碼。 – DyZ
like [this](http://ideone.com/Ns9quD) – BLUEPIXY
@DYZ:完全隨機並不準確 - 它被定義,但不是想要的。我同意雙循環是不必要的,但你已經誇大了你的情況。對於出現兩次的信件,計數將是4;對於出現三次的信,計數將是9;對於出現N次的信件,計數將是N 2。 –