有关字符串数组元素的翻转

题目给出一个字符串,包含字母与数字,其中每扫描到数字时,对应字符串数组该数字下标的字符与该数字前的字符这一段要前后翻转,翻转后去掉该数字,继续扫描
样例输入
Hel,ol3!dlrow6
样例输出
Hello,world!
我的代码这个样例是通过了的,但是别的样例总是不能通过,不知道哪里有问题,想了好久了,人都麻了


#include<stdio.h>
#include<string.h>
int main(){
    char a[100],b[100];
    int len,i,j,num;
    int m,n,k=1;
    scanf("%s",a);
    len=strlen(a);
    for(i=0;i<len;++i){     //将a中元素放入数组b 
        b[i]=a[i];
    }
    for(i=0;i<len;++i)      //找到其中的数字 
    {   
        if(a[i]>='0'&&a[i]<='9'){
            num=a[i]-'0';      //字符对应数字 
            for(j=i+1;j<len;++j)
            {
                if(a[j]>='0'&&a[j]<='9')  
                {
                    num=num*10+a[j]-'0';
                    k++;
                }
                else break;    
            }
            m=i;            //实现数组对应元素前后互换
            for(j=num;j<i;++j){
                a[num++]=b[--m];
                }
            for(j=i;j<len;++j){
                a[j]=a[j+k];
                
            } 
            len=len-k;           
        }
        for(n=0;n<len;++n){     //将a中元素放入数组b 
        b[n]=a[n];
         }
        
    }
    printf("%s",a);
    return 0;
}

试试len=len-k;下面加a[len]='\0';