一个C语言的编程问题

2025-01-31 14:44:40
推荐回答(4个)
回答1:

1)先对输入的数组进行字母ASCII码值进行比较大小排序,然后得到一个新的按字母的ASCII码大小进行排列的新数组(就是把字母当成数字看待);这一步就完成了你要的任务;
下面是统计一个不重复数组:
2)设一个数组cl,然后取排好序的数组的第一个字母(存入cl)作为基数和下一个字母比较,如果相同就继续让基数和下一个字母比较,如果不同就把这个不同的字母作为新的基数(让其存入cl)和它的下一比较,如此重复第二步,直至遍历所有已排序的数组;至此不出现重复字母的数组完毕;

回答2:

#include
#include
int main()
{
int a[26];
char str[20];
int i=0,j=0,k=0,len=0;
for(i=0;i<26;i++)
a[i]=0;
scanf("%s",&str);
len=strlen(str);
for(i=0;i a[(int)(str[i]-'a')]++;

for(i=1;i<=len;i++)
for(j=0;j<26;j++)
if(a[j]==i)
{ for(k=0;k putchar((char)(j+'a'));
}
return 0;
}

回答3:

#include

int main()
{
int i = 0, j , k;
static int times[26];//存储26个字母的出现次数
char str[255];
memset(str, '\0', 255);
printf("input the characters, end with '*'\n");
scanf("%c",str);
while(str[i] != '*')
{
i++;
scanf("%c",&str[i]);
}
for(j = 0; j < i; j++)
{
times[int(str[j]-'a')]++;
}
for(k = 0; k < 26; k++)
{
if(times[k] > 0)
{
printf("%c :\t%d time[s]\n", times[k] + 'a', times[k]);
}
}
return 0;
}

回答4:

//---------------------------------------------------------------------------

#include
#include

int cnt[26];

int cmp(const void *a,const void *b)
{
char ca,cb;
ca=*(char *)a;
cb=*(char *)b;
if (cnt[ca-'a']-cnt[cb-'a'])
return cnt[ca-'a']-cnt[cb-'a'];
else return ca-cb;
}
int main(void)
{
int i,sl=0;
char c,ln[256];
scanf("%s",ln);
for (i = 0; ln[i]; i++) {
++cnt[ln[i]-'a'];
++sl;
}
qsort(ln,sl,sizeof(char),cmp);
printf("%s\n",ln);
return 0;
}
//---------------------------------------------------------------------------