c for loop break语句不起作用

时间:2013-12-05 19:23:12

标签: c string loops search strstr

我写了一个for loop来搜索另一个字符串。我希望它在找到它时重命名它的位置。 (我愿意接受新的搜索建议:)

int search (char str1[56], char str2[5]){
    int c1, c2, c3, c4;
    c1 = 0;

    for (c1=0; c1<56; c1++)
    {
        c2 = 0, c3 = 0;
        for (c2 = 0; c2 < 5; c2++){
            if (str1[c1] == str2[c2]){
                c3++;
            }
        }

        if (c3 == 5){
            c4 = c1; 
            break;
        }
    }

    return c4;
}

4 个答案:

答案 0 :(得分:3)

听起来你想要strstr(),它会在字符串中搜索子字符串,并在找到时返回指向它的指针。在学习C时,字符串不是最好的开始,你最初想要使用正确的库。

答案 1 :(得分:1)

在最里面的for循环中,您遍历str2的所有字符,但将每个字符与str1

中的相同位置进行比较
for (c2=0; c2<5; c2++) {
    if (str1[c1] == str2[c2]) {
        c3++;
    }
}

你想要的是迭代str1的字符,即

for (c2=0; c2<5; c2++) {
    if (str1[c1+c2] == str2[c2]) {
        c3++;
    }
}

这将超出str1的界限,您可以通过仅搜索位置length(str1) - length(str2) + 1来解决此问题

for (c1=0; c1<56-4; c1++) {
但是,您应该考虑不使用硬编码的字符串长度

答案 2 :(得分:0)

正如@Jite建议的那样,你可以选择strstr(),这是最好的选择。如果您想为搜索添加其他风格,关于在iGnOrInG情况下比较两个字符串,您可以尝试strcasestr()

  

在使用其中任何一个时,不要忘记包含string.h

查看man page of strstr()以获取更多信息。此外,对于样本使用情况检查this

答案 3 :(得分:0)

#include <stdio.h>
#include <string.h>

int search(const char str1[56], const char str2[5]){
    int c1, c2;
    int len1 = strlen(str1);
    int len2 = strlen(str2);

    for (c1=0; c1<len1-len2+1; ++c1){
        for (c2 = 0; c2 < len2; ++c2)
            if (str1[c1+c2] != str2[c2])
                break;
        if (c2 == len2)
            return c1;
    }

    return -1;//not found
}
int main(void){//DEMO
    const char *test_data[] = { "test", "the", "pro", "gram", "hte" };
    int i, size = sizeof(test_data)/sizeof(*test_data);
    for(i=0;i<size;++i){
        int result;
        result=search("test the program!", test_data[i]);
        printf("%d\n", result);//0, 5, 9, 12, -1
    }
    return 0;
}