1 写一函数int fun(char *p)判断一字符串是否为回文 bool isHuiwen(const char *str);

2 字符串逆序:char *inverseString(char *str);

3 求字符串中出现频率最高的字符 :char maxCountChar_string(const char *str);

4 写出在母串中查找子串 出现次数的代码:int subNum_string(const char *str,const char *substring);

5 编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh” :void loopMoveNum(char *pStr,int steps);

6 找字符串中最长对称串:从最长的开始找起来--char *maxLenHuiwen(char *pStr);

7 求字符串中对称串的个数(和最长的对称串相对应的):int countHuiwen(const char *pStr);


=========================================================================================

1 写一函数int fun(char *p)判断一字符串是否为回文 bool isHuiwen(const char *str);

// (str[i],str[len-1-i])比较
bool isHuiwen( const char *str )
{
    //// 1 使用 字符数组的形式。
    //assert(str!=NULL);
    //bool isTrue=true;
    //int len=strlen(str);
    //for(int i=0;i 
  

2 字符串逆序:char *inverseString(char *str);

//(str[i],str[len-1-i])交换
char * inverseString( char *str )
{
    ////2 使用指针的形式。
    //assert(str!=NULL);
    //int len=strlen(str);
    //char *q=(char*)str+len-1;    //对于有const的指针,需要使用(cahr*)的形式。
    //char *add=str;
    //char tmp;
    //while(str 
  

3 求字符串中出现频率最高的字符 :char maxCountChar_string(const char *str);

//有待改进(可以使用map 之类的进行整合)
char maxCountChar_string( const char *str )
{
    assert(str!=NULL);
    int allchar[26]={0};    //假设是26个小写字母,其他的呢???(重点)
    int maxNum=1;
    char *t=(char*)str,maxchar=*str;
    while(*t!='\0')
    {
        allchar[*t-'a']++;
        if(allchar[*t-'a']>maxNum)
        {
            maxchar=*t;
            maxNum=allchar[*t-'a'];
        }
        t++;
    }
    cout<<"The max number of char is "< 
  

4 写出在母串中查找子串 出现次数:int subNum_string(const char *str,const char *substring);

//就是在 字符串匹配的基础上加上计数的功能:可以使用 递归的吧???
int subNum_string( const char *src,const char *dest )
{
    assert(src!=NULL&&dest!=NULL);
    int len1,len2;
    len1=strlen(src);
    len2=strlen(dest);
    int count=0;
    for(int i=0;i 
  


5 编写一个函数,作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n=2,移位后应该是“hiabcdefgh” :void loopMoveNum(char *pStr,int steps);

void loopMoveNum( char *pStr,int steps )
{
    ////1 memcpy 的方式得到:1 需要移动的tmp  2 前面的往后面移动  3 tmp补上位置。
    //int lenRest=strlen(pStr)-steps;
    //char *tmp;
    //tmp=(char*)malloc((steps+1)*sizeof(char));
    //assert(tmp!=NULL);
    //heheei123----123(tmp)----heh heheei(pStr)----123 heheei(pStr)
    //memcpy(tmp,pStr+lenRest,steps);
    //memcpy(pStr+steps,pStr,lenRest);
    //memcpy(pStr,tmp,steps);
    //free(tmp);
    //tmp=NULL;
    //cout<<"右移动后的字符串是"< 
  

6 找字符串中最长对称串:从最长的开始找起来--char *maxLenHuiwen(char *pStr);

//从最长的开始找起,知道知道的话,退出循环,保存起始的位置以及长度。
char * maxLenHuiwen( char *pStr )
{
    assert(pStr!=NULL);
    int lenStr=strlen(pStr);
    if(lenStr==1)
    {
        cout<<"只有一个字符,亲!!"<1;n--)
    {
        for(int m=0;m<=lenStr-n;m++)
        {
            tmp=new char[n+1];
            memcpy(tmp,pStr+m,n);
            *(tmp+n)='\0';
            //strProc.strncpy1(tmp,pStr+m,n);        //使用自己编写的类,具有重大的意义。
            if(isHuiwen(tmp))
            {
                cout<<"最大的对称串是"< 
  

7 求字符串中对称串的个数(和最长的对称串相对应的):int countHuiwen(const char *pStr);

//从小到大(或者是从大到小)的顺序:找到一个加上一个的 数量,而不是break;
int countHuiwen(const char *pStr )
{
    assert(pStr!=NULL);
    int count=0;
    int len=strlen(pStr);
    if(len==1)
    {
        cout<<"只有一个字符,亲!!"< 
  


测试代码

int main()
{
    //char str[]="heeheei123";
    //isHuiwen(str);
    //inverseString(str);
    /*maxCountChar_string(str);*/
    /*char str1[]="hahahanihaohah";
    char str2[]="hah";
    subNum_string(str1,str2);*/
    //loopMoveNum(str,3);
    char str[]="heehee";
    //maxLenHuiwen(str);
    countHuiwen(str);
    return 0;
}