字符串处理(结构体成员创建模板)
题目描述:
输入一个字符串str和一个整数k,输出字符串中出现次数第k多的字符。
输入:
第一行是一个字符串,字符串长度小于10000; 第二行是一个整数k(0<k<10)。
输出:
输出字符串出现次数第k多的字符,如果第k多的字符有多个,输出ASCII码最小的那个字符,单独占一行。
样例输入:
hello world
2
样例输出:
o
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define SWAP(a,b,t){t = a; a = b; b = t;}
typedef struct zifu{
char c;
int m;
}C;
int Judge(C a1, C a2)
{
if(a1.m != a2.m){
if(a1.m < a2.m)
return 1;
}
else{
if(a1.c > a2.c)
return 1;
}
return 0;
}
int main()
{
int k, i, t, j = 0, flag = 0;
char str[10001];
gets(str);
scanf("%d",&k);
C a[10000], buf;
/********************************/
for(i = 0; str[i] != '\0'; i ++){
for(t = 0; t < j; t++){
if(str[i] == a[t].c){
a[t].m++;
flag = 1;
break;
}
flag = 0;
}
if(flag == 0){
a[j].c = str[i];
a[j++].m = 1;
}
}
/*******************************/
for(i = 0; i < j-1; i++){
for(t = i+1; t < j; t++){
if(Judge(a[i], a[t]))
SWAP(a[i],a[t],buf);
}
}
printf("%c\n",a[k-1].c);
return 0;
}