// 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; }