我写了一个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;
}
答案 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;
}