我有一个函数,它应该读取一个字符串(只包含数字),并返回没有重复数字的最大序列。
例如:
一百二十三亿四千五百二十六万七千八百九十
它应该返回:345267890
我已经手动测试了代码,我相信它应该可以工作。但是当我运行它,当它到达这条线时,我得到的不是指针之间的距离,而是-1046583。我能做这个吗?
char* bigSeq(char *v){
int i, j;
char *aux, *bgst;
aux=(char*) malloc(10*sizeof(char));
bgst=(char*) malloc(10*sizeof(char));
for(i=0;i<strlen(v);i++){
for(j=0;j<strlen(v+i);j++){
if(strchr(v+i, *(v+j)) != (v+j)){
if(strlen(strncpy(aux, (v+i),j)) > strlen(bgst))
strncpy(bgst, (v+i),j);
i=(strchr(v+i, *(v+j)))-v;
break;
}
}
}
return bgst;
}
最佳答案
我认为您的问题在于strchr()
和它在找不到您要搜索的字符时返回的内容。在这种情况下,它返回0,而不是传递给它的字符串的开始或结束。
您还应该检查将输入设为“const char *
”,并查看为什么需要在两个循环的每次迭代中调用strlen()
。你也许可以做得更好。
注意,如果非重复数字的最长子串都是10位数字,则分配的空间太小-还需要为字符串末尾的NUL'\0'
分配一个字节。另外,strncpy()
不能保证空终止字符串;我不确定这是否是您的问题的一部分。
关于c - C中两个指针之间的距离,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5640928/