您的位置:首页 > 大数据 > 人工智能

Bailian4071 查找出现了k次的字符【字符串】

2017-11-29 20:27 375 查看
查找出现了k次的字符

总时间限制: 1000ms 内存限制: 65536kB
描述
给定一个ASCII字符串,查找字符串中,出现了k次的字符。比如,字符串"This
is a good day!"中,出现了2次的字符为'a','d','i','o',
's',出现了4次的字符为' '。

输入第一行是一个正整数n(1<=n<=100),表示下面要进行查找的字符串的数量。其后n行,每行是一个字符串(这里确保字符串的结尾不是空格),和一个数字k,字符串和数字k之间由一个空格隔开。
输出输出要求按照ASCII码从小到大的顺序输出字符,每个字符用单引号括起来,字符间用逗号隔开。
样例输入
2
This is a good day! 2
This is a good day! 4


样例输出
'a','d','i','o','s'
' '


问题链接Bailian4071 查找出现了k次的字符

问题分析:出题人不说每行最多多少字符,让程序员情何以堪?坑啊!
程序说明:怎么获得k,是个关键,每行的字符串中有空格是很坑的,没法用字符串格式化输入啊!只能一行一行输入,从中取出k。

题记:这个问题非常经典,程序中使用了诸多技巧。
 

AC的C语言程序如下:

/* Bailian4071 查找出现了k次的字符 */

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

#define N 256
char s
;
int count
;

int main(void)
{
int n, k, len, i, flag;

scanf("%d", &n);
getchar();
while(n--) {
gets(s);

len = strlen(s) - 1;
while(isdigit(s[len]))
len--;
k = atoi(&s[len + 1]);
s[len] = '\0';

memset(count, 0, sizeof(count));
i = 0;
while(s[i]) {
count[(unsigned int) s[i]]++;
i++;
}

flag = 0;
for(i=1; i<N; i++) {
if(count[i] == k) {
if(flag)
printf(",");
flag = 1;
printf("'%c'", (char)i);
}
}
printf("\n");
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: