转换字符串格式为原来字符串里的字符+该字符连续出现的个数,例如:1233422222 转换为1121324125(1出现1次,2出现1次,3出现2次......
与这题类似的有:一个超大文本单词列表中,统计每个单词出现的次数。
方法:
定义2个变量p,tmp,tmp一个放目前正在统计次数的字符,p放刚刚读入的字符,还要定义一个count统计当前字符出现的次数
如果tmp == p, 那么说明又读进来一个同样的字符,那么这个字符出现的次数count++
如果tmp!=p, 那么说明读进来一个新的字符,需要把原来tmp和count输出,然后把tmp置为p,count=1,开始统计p里面的字符出现的次数
代码:
#include<iostream>
using namespace std;
int main()
{
char str[50];
char tmp;
int count = 0;
cin>>str;
char *p = str;
tmp = *p;
count++;
while(*(++p)!='\0')
{
if(*p == tmp)//如果当前读入的字符和正在统计的一样,那么出现次数要++
{
count++;
continue;
}
cout<<tmp<<count;//如果读入一个新的字符,就要把正在统计的字符频率输出,接下来开始统计新读入的字符的出现次数
tmp = *p;
count = 1;
}
cout<<tmp<<count;//因为读到'\0'循环退出,最后一个连续的字符序列没有输出,所以在这里追加输出
getchar();
getchar();
return 0;
}