在"字符串指针中搜索字符串" - C语言

时间:2016-02-23 03:04:41

标签: c pointers

我正在尝试在字符串指针中搜索字符串。我不确定如何解释我想要实现的目标,但我会尽力而为。

我们说我有两个字符串指针char *p = "hello world"char *q = "world"world位于hello world,所以我想返回一个指针{{1 }}指向*start的{​​{1}}。我希望这是有道理的,如果没有,请随时在下面发表评论。

注意:不幸的是,我不允许使用除w之外的任何*p库函数,而且我不允许使用索引,实际上我不被允许使用任何方括号string.h

P.S。忽略所有strlen(),因为他们在那里检查程序出错的地方。

[]

一旦它到达printf,它就会过早退出循环。我不知道为什么这样做? 这是我的问题

输出:

  

p:h与q:w

比较      

p:e与q:w

比较      

p:l与q:w

进行比较      

p:l与q:w

进行比较      

p:o与q:w

进行比较      

p:与q:w

比较      

未找到

编辑:

#include <stdio.h> #include <string.h> int main(){ char *p = "hello world", *q = "world", *start; int i, count = 0; printf("%c\n", *p); for (i = 0; i < strlen(p); i++){ printf("p: %c compares with q: %c\n", *p, *q); if ( *p == *q){ // tried: if ( p == q) start = p; printf("start: %s\n", start); while (*p == *q){ // tried: while ( p == q) printf("p: %c compares with q: %c\n", *p, *q); count ++; p ++; q ++; if ( count == strlen(q) ){ printf("Found it\n"); return *start; } } } p ++; } printf("Not Found\n"); return 0; } 编译器没有给我任何警告/错误。

2 个答案:

答案 0 :(得分:2)

您的for循环正在将i与字符串p指向的长度进行比较,但由于您不断更改p,因此该长度会逐渐变小,这是为什么for循环在检查p的中途结束。

如果您没有使用计数器i(您不做任何其他操作),而是使用for循环替换while ( *p != '\0' )循环,直到您到达终点p

(注意:一旦剩下的长度小于字符串q指向的长度,你就可以实际停止该循环,但我将把它作为练习。)

答案 1 :(得分:0)

我相信这会奏效:

char* find_pos_in_string(char* string, char* find) {
    for (char* s = string; *s != '\0'; ++s) {
        char* f = find;
        for (char* s_tmp = s; (*f == *s_tmp) && (*s_tmp != '\0') && (*f != '\0'); ++f, ++s_tmp);
        if (*f == '\0') return s;
    }
    return NULL;
}

第一个for循环遍历string中所有可能的起始位置。第二个for比较从s开始的两个字符串中的每个字符。如果它找到一些字符差异或者任一字符串到达​​其结尾,它将停止。如果find字符串已到达其末尾,则表示所有后续字符匹配:我们找到了我们的位置(即s)。如果外部循环没有匹配,则find不作为子字符串存在。我们返回NULL