华为OJ平台试题 ——字符串:打印字符串中重复的字符

来源:互联网 发布:微信 积分 源码下载 编辑:程序博客网 时间:2024/05/18 13:12
/* * 功能:打印字符串中重复的字符 * * 输入:字符串 * 算法: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[N];        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 );}}    

0 0