删除字符串中出现次数最小的字符及书写字符串函数时的一个注意点

来源:互联网 发布:node forever 重启 编辑:程序博客网 时间:2024/06/05 08:00

void delete_least_num_char(char *src)    //函数形参字符指针函数形参是字符串首地址

{

    int i;

    int j = 0;

    int min_num;

    int temp;

    char *temp1 = src;

    int  charcount[26] = {0};

    char min_num_char[26];

    

    while(*src != '\0')                           //遍历字符串,计数26个英文字母在字

    {                                        //符串中出现的次数

        switch(*src)

    {

        case 'a':charcount['a' - 'a']++;break;

        case 'b':charcount['b' - 'a']++;break;

        case 'c':charcount['c' - 'a']++;break;

        case 'd':charcount['d' - 'd']++;break;

        case 'e':charcount['e' - 'a']++;break;

        case 'f':charcount['f' - 'a']++;break;

        case 'g':charcount['g' - 'a']++;break;

        case 'h':charcount['h' - 'a']++;break;

        case 'i':charcount['i' - 'a']++;break;

        case 'j':charcount['j' - 'a']++;break;

        case 'k':charcount['k' - 'a']++;break;

        case 'l':charcount['l' - 'a']++;break;

        case 'm':charcount['m' - 'a']++;break;

        case 'n':charcount['n' - 'a']++;break;

        case 'o':charcount['o' - 'a']++;break;

        case 'p':charcount['p' - 'a']++;break;

        case 'q':charcount['q' - 'a']++;break;

        case 'r':charcount['r' - 'a']++;break;

        case 's':charcount['s' - 'a']++;break;

        case 't':charcount['t' - 'a']++;break;

        case 'u':charcount['u' - 'a']++;break;

        case 'v':charcount['v' - 'a']++;break;

        case 'w':charcount['w' - 'a']++;break;

        case 'x':charcount['x' - 'a']++;break;

        case 'y':charcount['y' - 'a']++;break;

        case 'z':charcount['z' - 'a']++;break;

   }

 

        src++;

    }

 

 

    for(i = 0;i < 26;i++)

    {

        if(charcount[i] != 0)

    {

        min_num = charcount[i];

        break;

    }

    }

 

 

    for(i = 0;i < 26;i++)    //结合上一个for循环,确定字符串中出现最小次数字符的个数

    {

        if(charcount[i] != 0)

    {

        if(min_num > charcount[i])

        {

            min_num = charcount[i];

        }

    }

    }

 

    for(i = 0;i < 26;i++) //将出现最小次数的字符都放在一个字符数组min_num_char[26]

    {

        if(charcount[i] == min_num)

    {

          min_num_char[j] = 'a' + i;

          j++;

     }

    }

    min_num_char[j] = '\0';

 

 

    temp = j;

    src = temp1;

    for(i = 0;i < temp;i++) //遍历字符串,输出字符串中出现次数最少的字符

    {

        while(*src != '\0')

    {

            if(min_num_char[i] == *src)

        {

            delete_one_char(src);  //删除一个字符串,即字符整体往前移一下

                                    //这个是调用的自己写的一个子文件

        }

 

          

            else

        {

            src++;

        }

   

   }

       

        src = temp1;

    }

 

 

注意点:当两次遍历字符串的时候,第一次遍历完以后,这时候指向的地址是字符串结束符的位置,第二次再遍历的时候,要注意把指针再指向字符串首元素的地址。

0 0
原创粉丝点击