黑马程序员技术交流社区
标题:
一道笔试题的两种解法,大家觉得那个更好呢
[打印本页]
作者:
jdc123
时间:
2016-5-29 22:41
标题:
一道笔试题的两种解法,大家觉得那个更好呢
/*
题目要求:
控制台输入一个字符串
对字符串进行过滤,只保留其中的英文字母,生成新字符串
统计新字符串中每个英文字母的出现次数
*/
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
char ch[100];
char newCh[100];
printf("请输入一个字符串");
gets(ch);
int len = (int)strlen(ch);
for (int i = 0,j=0; i <=len; i++) {
if ((ch[i]>64&&ch[i]<91)||(ch[i]>96&&ch[i]<123)) {
newCh[j] = ch[i];
j++;
}else if (ch[i] == '\0') {
newCh[j] = ch[i];
}
}
printf("%s\n",newCh);
//-------------------统计重复字母次数方法1---------------------
//使用选择排序法逐个比较字符串中的字母
for (int i=0; i<strlen(newCh); i++) {
int count=1;
for (int j=i+1; j<=strlen(newCh); j++) {
if (newCh[i]==newCh[j]) {
newCh[j]+=58;//让重复的字母变为不是字母
count++;
}
}
//避免重复的字母重复统计
if ((newCh[i]>64&&newCh[i]<91)||(newCh[i]>96&&newCh[i]<123)) {
NSLog(@"%c的出现次数为%d",newCh[i],count);
}
}
}
return 0;
}
//-------------统计字重复字母数的方法2-----------------
// 存储字母出现次数的数组
int count[26];
length = (int)strlen(newCh);
// 遍历数组统计字母出现次数
for (int i = 0; i < 26; i++) {
// 先对数组元素进行初始化
count[i] = 0;
for (int j = 0; j < length; j++) {
if (newCh[j] == 65 + i || newCh[j] == 97 + i) {
count[i]++;
}
}
}
// 输出结果
printf("The new string is: %s\n", newStr);
for (int i = 0; i < 26; i++) {
if (count[i] != 0) {
printf("The count of \'%c\' and \'%c\' is: %d\n", 65 + i, 97 + i, count[i]);
}
}
}
return 0;
}
复制代码
作者:
jdc123
时间:
2016-5-29 23:19
兄弟们给个回复吧
作者:
2528
时间:
2016-5-31 07:50
第二种,清晰。
作者:
jdc123
时间:
2016-5-31 12:52
2528 发表于 2016-5-31 07:50
第二种,清晰。
好吧,虽然第一种是我的解法,而且我认为我的解法更有效率,但还是接收你的看法
作者:
vivi342863
时间:
2016-5-31 18:44
感觉各有各的好处吧.都不错.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2