2 liu13610 liu13610 于 2014.12.19 12:54 提问

用c++写了一个函数判断一个数组是否包含另一个数组 但是总是返回-1 请大神们帮忙看看错在哪里
c++

int substr_index( const char substr[], const char str[])
{
int flag = -1;
int sizeOfSubstr = sizeof(substr)/sizeof(char);
int sizeOfStr = sizeof(str)/sizeof(char);
for (int i = 0; i < sizeOfStr; i++)
{
if (str[i] == substr[0])
{
flag = i;
for (int j = 1; j < sizeOfSubstr; j++)
{
if (str[i + j] != substr[j])
{
flag = -1;
break;
}
}
}
if (flag == i)
break;
}
return flag;
}

12个回答

caozhy
caozhy   Ds   Rxr 2014.12.19 13:22
已采纳
         int sizeOfSubstr = strlen(substr);
         int sizeOfStr = strlen(str);

这样就可以了,亲自调试通过。

caozhy
caozhy 回复bdmh: 粗心了,没仔细测试
大约 3 年之前 回复
bdmh
bdmh strlen对“1234”这样的有效,对{'1','2','3','4'}无效
大约 3 年之前 回复
caozhy
caozhy   Ds   Rxr 2014.12.19 13:18

不应该用sizeof,应该用strlen代替。

VisualEleven
VisualEleven   Ds   Rxr 2014.12.19 14:11

int substr_index( const char substr[], const char str[])

数组作为函数函数传递的时候,都会退化为指针。
所以你的sizeof()操作都是4(32位平台)

Eve_dark
Eve_dark   2014.12.19 13:07

sizeof(substr)不会反悔数组占用的空间。在函数传递时,char substr[]与char *substr相似。都是传递一个指针。

Eve_dark
Eve_dark   2014.12.19 13:06

sizeof(substr)不会反悔数组占用的空间。在函数传递时,char substr[]与char *substr相似。都是传递一个指针。

bdmh
bdmh   Ds   Rxr 2014.12.19 13:16

substr_index中的数组参数,会被当做指针,则有你用sizeof获得的是指针的长度,32位下面就是4,而你需要的是数组元素个数

bdmh
bdmh   Ds   Rxr 2014.12.19 13:54

strlen对“1234”这样的有效,对{'1','2','3','4'}无效

caozhy
caozhy   Ds   Rxr 2014.12.19 13:56

贴一个完善的程序供lz参考

caozhy
caozhy   Ds   Rxr 2014.12.19 13:57

贴一个完善的程序供lz参考 http://www.cnblogs.com/kaituorensheng/p/3633700.html

caozhy
caozhy   Ds   Rxr 2014.12.19 13:57

贴一个完善的程序供lz参考 http://www.cnblogs.com/kaituorensheng/p/3633700.html

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!