我有一个1和0的数组,它被压缩,当1的数量大于10时,当n的数量为1时,写入+ n +,当0的数量大于10时写入-n-当n为0时,否则按原样写入。
现在问题是,我需要解压缩数组以将其写回文件。但我找不到将零或1的数量转换为整数的方法。它一直给我一个错误,它说初始化'int atoi(const char *)的参数1和同一行的另一个错误,表示从'char'到'const char *'的无效转换 我在Linux工作。 这是我的代码的一部分
else if(str[i]=='+')
{
n=atoi(str[i+1]);
for(int j=0;j<n;j++)
{
strcat(temp,"1");
i=i+n-1;
}
}
答案 0 :(得分:1)
这是一个算法“扩展” - 不要在生产中使用它 - 例如,没有错误检查,所以它不安全。这是一个简单的例子。
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;
}