华为OJ平台试题 ——字符串:打印字符串中重复的字符
2015-08-18 22:04
155 查看
/* * 功能:打印字符串中重复的字符 * * 输入:字符串 * 算法:1、首先将第一个字符存如定义的结构体数组 a[0].c,同时将a[0].count = 1 * 2、将其他的字符依次与第一个字符进行比较,若相同,则a[0].count++,若不同,则将这个字符存入新的a[1]; * 以此类推 * 3、根据a[].count 的值是否大于等于2,将值输出 */ #include<stdio.h> #include <string.h> #define N 1024 /* * 定义一个结构体:字符和字符数目 */ struct CountChar { char c; int count; }; int main(void) { struct CountChar a[256]; /* 定义一个结构体数组,该数组有236个元素,均为struct CountChar 类型数据 */ char b ; int i, j, k = 1;; /* 将结构体数组初始化 */ for(i = 0; i < 256; i++) { a[i].c= 0; a[i].count=0; } gets(b); /* 输入字符串 */ a[0].c = b[0]; a[0].count = 1; /* * 将字符串进行解析 */ for(i=1; b[i] != '\0'; i++) { for( j = 0;j < k;j++) { if(a[j].c == b[i]) /* 判断新的值是否与存在的值相同 */ { a[j].count ++; break; /* 此处的break 语句非常重要 */ } else if( (b[i] != a[j].c) && j == k-1 ) { a[k].c = b[i]; /* 这里先把 b[i] 赋值给了 a[k].c, 但a[j].c 的值仍未变,只有当j等于k时才<span style="white-space:pre"> </span>会改变,所以当再次进入到上面的判断时,就可以将先加入的数据的count 加1 */ k++; } } } for(i = 0; i < k;i++ ) { if( a[i].count >= 2 ) printf("%c",a[i].c ); } }
相关文章推荐
- UIP协议栈二
- HDU 5401 Persistent Link/cut Tree
- 文章标题
- RT-Thread finsh源码分析: finsh_heap.h
- PAT 1016. Phone Bills (25)
- Product Versioning policy
- linux下查看图片
- Github搭建属于自己的开源项目-androd学习之旅(72)
- CentOS7.0手动设置yum源教程
- Exchange工具01—使用Exchange EDB Viewer查看EDB文件
- 为什么要引入补码
- Github搭建属于自己的开源项目-androd学习之旅(72)
- Github搭建属于自己的开源项目-androd学习之旅(72)
- Android学习0817<一>(Android环境搭建)
- HDU 4494 Teamwork 最小费用最大流
- 用链表表示的两个数相加
- mini2440 电源插座的问题
- RT-Thread finsh源码分析: finsh_var.c
- 花生壳映射svn
- BZOJ 1703 [Usaco2007 Mar]Ranking the Cows 奶牛排名 bitset优化