您的当前位置:首页正文

华为机试 解压字符串;开始没做出来,后来继续做;只记得一条case,代码仅供参考

来源:九壹网

// a11b2bac3bad3abcd2 输入

 //bbabcdabcdbacbacbacbadbadbadaaaaaaaaaaa 输出

 //bbabcdabcdbacbacbacbadbadbadaaaaaaaaaaa

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

 

int isNum(char c)

{

   if(c >='1' && c <= '9')

   {

     return 1;

   }

   return 0;

}

 

int isChar(char c)

{

   if(c >='a' && c <= 'z' || c >='A' && c <= 'B')

   {

     return 1;

   }

   return 0;

}

struct StrList

{

    int num;

    char str[255];

    /* data */

};

int sortByStr(struct StrList *detail,int strLen)

{

    struct StrList tmpDetail;

    for (int t = 0; t < strLen; t++)

    {

        for (int i = 0; i < 255; i++)

    { 

        if(detail[i].num && strlen(detail[i].str)){

            for (int j = 0;j < 255 -i - 1; j++)

            {

               if(detail[j].num && strlen(detail[j].str)){

                    if(detail[j].str[t] > detail[j+1].str[t]){

                         tmpDetail = detail[j];

                         detail[j] = detail[j+1];

                         detail[j+1] = tmpDetail;

                     }

                }

                /* code */

            }

        }

    }      

    }

}

int main()

{

   char a[1000];

   char b;

   scanf("%s",a);

   struct StrList detail[255]={};

    int numCount = 0;

    int strCount = 0;

    char tmpStr[255] = {0};

    for (int i,j = 0; i < strlen(a); i++)

    {

        char *p = a + i;

        if(isNum(a[i])){

           numCount = 0;

            char tmpNumStr[255] = {0};

            while (isNum(*p))

            {

                numCount++;

                p++;

            }

            i+=(numCount-1);

            strncpy(tmpNumStr,p-numCount,numCount);

           // printf("tmpNumStr = %s\n",tmpNumStr);

           detail[j].num = atoi(tmpNumStr);

            memccpy(detail[j].str,tmpStr,0,sizeof(tmpStr));

            j++;

        }else{

            strCount= 0;

            while (isChar(*p))

            {

                strCount++;

                p++;

                //i++;

            }

            i+=(strCount-1);

            memset(tmpStr,0,sizeof(tmpStr));

            strncpy(tmpStr,p-strCount,strCount);

            //printf("tmpStr = %s\n",tmpStr);

        }

    }

    char dest[1000] = {};

    struct StrList tmpDetail;

    for (int i = 0; i < 255; i++)

    { 

        if(detail[i].num && strlen(detail[i].str)){

            for (int j = 0;j < 255 -i - 1; j++)

            {

               if(detail[j].num && strlen(detail[j].str)){

                    //printf("num = %d,str = %s\n",detail[j].num,detail[j].str);

                    // printf("i num = %d,j num = %d\n",detail[i].num,detail[j].num);

                    if(detail[j].num > detail[j+1].num){

                         tmpDetail = detail[j];

                         detail[j] = detail[j+1];

                         detail[j+1] = tmpDetail;

                     }

                     if(strlen(detail[j].str) ==  strlen(detail[j+1].str)

                     &&detail[j].str > detail[j+1].str){

                          tmpDetail = detail[j];

                         detail[j] = detail[j+1];

                         detail[j+1] = tmpDetail;

                     }

                }

                /* code */

            }

        }

    }    

   

       for (int i = 0; i < 255; i++)

    { 

        if(detail[i].num && strlen(detail[i].str)){

            printf("end num = %d,str = %s\n",detail[i].num,detail[i].str);

            for (int j = 0; j < detail[i].num; j++)

            {

                strcat(dest,detail[i].str);

            }

        }

    }    

    printf("%s\n",dest);

   return 0;

}


 

因篇幅问题不能全部显示,请点此查看更多更全内容

Top