我遇到了这个问题的麻烦,任何有关如何解决它的提示都会受到赞赏。
此函数查找原始中第一次出现的toFind,并返回一个整数,表示原始中toFind子字符串的第一个元素的索引。例如,如果找到了人,那就是'原来是超人'自从人类开始以来,这个功能就会回归6。在蜘蛛侠'是位置7.如果函数找不到子字符串,则应返回-1。
到目前为止我所拥有的:
{
printf("%s\n%s\n", original, toFind);
int j, i, k, start, length;
i = 0;
j = 0;
k = 0;
length = (int)strlen(original);
start = 0;
printf("%d\n", length);
for (i = 0; i < strlen(toFind); ++i)
{
while (j != (length - 1))
{
printf("j: %d\n", j);
if (toFind[i] == original[j])
{
while (k != strlen(toFind))
{
if (toFind[i + k] == original[j + k])
{
printf("k: %d\n", k);
k = k + 1;
start = j;
}
else
{
k = 0;
}
}
}
else
{
++j;
}
}
}
printf("%d\n", start);
if (k == strlen(toFind))
{
printf("Word found\n");
return start;
}
else
{
printf("Word not found\n");
return -1;
}
return 0;
答案 0 :(得分:0)
无论条件为真还是假,都必须将j的值增加1。在你的代码中,当if为true时,j的值在此之后不会增加。所以它停留在那里,总是在那种情况下获得真正的价值。我可能不会向你澄清这一点。只需将else{ ++j; }
替换为++j;
。
答案 1 :(得分:0)
不试图为你做你的工作,但这是我提出的一个简短的例子。这是未经测试的。基本上它遍历字符串1,直到找到匹配的字符,然后遍历两个字符串,直到找到一个不匹配的字符或字符用完为止。
const char* str1 = "Hello find me" , *str2 = "find";
int i = 0;
while (str1[i]) {
while (str1[i] && str1[i] != str2[0]) {
++i;
}
int j = 0;
while (str1[i + j] && str1[i + j] == str2[j]) {
++j;
}
if (!str2[j]) {return i;}
}
return -1;