// test_min_max.cpp : 定义控制台应用程序的入口点。
//实现字符串相同字符个数统计
//
//样例输入:ajkhhhk
//样例输出:a1j1k1hhh3k1
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
char *letter_count(char *str)
{
char *p=str; //指向当前字符
char *q=p+1; //指向当前字符的下一个字符 他和前一个字符作比较
int len=strlen(str);
char *buf=new char[len+1]; //堆中申请内存空间
int count=1; //记录相同字符的个数
while (*q)
{
if (*p==*q)
{
p++;
q++;
count++;
}
else
{
itoa(count,buf,10);
int nbits=strlen(buf); //记录要跳过的字符数
strcat(buf,q);
*q=0; //将*q所指向的位置清零,buf指向的字符串将链接到此处,否则会连接到str的末尾
strcat(str,buf);
p=p+nbits+1;
q=p+1;
count=1;
}
}
itoa(count,buf,10);
strcat(str,buf);
delete []buf;
buf==NULL;
return str;
}
int main()
{
//方法一
char s1[10];
cin>>s1;
//方法二
//string s1="aaab"; //s2=letter_count(&s1[0]);
//方法三
//这种方法会报错,原因就是s1指向一个字符串常量,(不可改变内容)
//所以在子函数中*q=0; 会报错
//char *s1="aaab";
char *s2=NULL;
s2=letter_count(s1);
cout<<s2<<endl;
return 0;
}