您的位置:首页 > 其它

华为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 );
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: