質問

I have an array of 1's and 0's which is compressed in such a way that when the number of 1's is greater than 10 it writes +n+ when n in the number of 1's and when the number of 0's is greater than 10 it writes -n- when n in the number of 0's otherwise it writes them as it is.

Now the issue is, I need to decompress the array to write it back to the file. But I can't find a way to convert the number of zeros or ones to integer. It keeps giving me an error which says initializing argument 1 of ‘int atoi(const char*) and another one on the same line which says invalid conversion from ‘char’ to ‘const char*’ I'm working in Linux. Here's a peice of my code

else if(str[i]=='+')
{
n=atoi(str[i+1]);
for(int j=0;j<n;j++)    
{
    strcat(temp,"1");
    i=i+n-1;

}           
}
役に立ちましたか?

解決

This is an algorithm do "expansion" - don't ever use it in production - for example, there is no error checking, so it is not safe. It is a quick example.

char *decode(char *q)
{
   char *all=NULL;
   long i=0;
   int n='0';
   char *p;
   if(*q== '+')
     n='1';
   ++q;
   i=strtol(q, NULL, 10);
   all=calloc( i + 1, 1);
   for(p=all; i; i--)
      *p++=n;

   return all;
}

char *decompress(char *dest, char *str)
{
    char *p=str;
    char *q=dest;
    for(; *p; p++)
    {
       if( isdigit((int)*p) )
       {
          *q++=*p;
          *q=0x0;
       }
       else  // - or +
       {
          char *tmp=decode(p);
          strcpy(q, tmp);   
          q=strchr(q, '\0');
          free(tmp);         
          p=strchr(p+1, *p);  // next 
       }
    }
    return dest;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top