我有一个函数,它应该读取一个字符串(其中只有数字)并返回没有重复数字的最大序列。 例如: 12345267890
它应该返回:345267890
我已经手动试验了代码,我相信它应该可以工作。但是当我运行它时,当它到达这一行 i=(strchr(v+i, *(v+j)))-v;
而不是获取指针之间的距离时,我得到了一些东西比如-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()
不保证以 null 终止您的字符串;我不确定这是否是您的问题的一部分。
关于c - C中两个指针之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5640928/