/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @return string字符串 */ #include <string.h> #define size 51 char *chuinkuo(char*s){ //像名字一样,找到第一个"]",操作一下去除第一对括号 int i=0;int len=strlen(s);int str=0; for(i=0;i<len;i++){ if(s[i]==']'){ //找到第一个"]" break; } else{ str++; //用stl 和str,标记[],两个括号的下标 } } if(str==len){ //没有括号直接返回 return s; }else{ char*t=NULL; //把第一对括号拆开,返回这个t t=malloc(sizeof(char)*size); int stl=0; for(i=str-1;i>0;i--){ if(s[i]=='['){ //这里找到了的[的下标 stl=i; break; } } int num=0; //stl前一个就是复制的倍数了 num=s[i-1]-'0'; printf("num=%d\n",num); strncpy(t,s,stl-1); //前面的全部复制copy int k=0;int j=stl-1; while(num--){ //num遍,k用来复制体循环,j用来t的循环 for(k=0;k<str-stl-1;k++){ t[j++]=s[stl+k+1]; } } i=str+1; //s的第一个]后的全部复制到t的后面 while(i<len){ t[j++]=s[i++]; } return t; } } char* decodeString(char* s ) { // write code here int i=0,len=strlen(s); printf("%d\n",len); s=chuinkuo(s); //先去除一遍,如果长度没变就,说明没有括号了 while(strlen(s)!=len){ //注意这里都是s,其实不一样不申请了。做一遍上面的功能发现长度没变就表示没有括号了 len=strlen(s); printf("%d\n",len); s=chuinkuo(s); } return s; }