qq_30584097 2020-01-13 20:03 采纳率: 100%
浏览 253
已采纳

这个阅读题思路是什么?

#include <stdio.h>
#include <string.h>
char * f(char p[], char s[])
{
    static int i = 0;
    int j = 0;
    while(p[i] && s[j])
    if(p[i++] == s[j]) j++;

    if(i == strlen(p))
    i = 0;
    return (p + i);

}
int main (){
    char * a = "Herehere";
    char * p , * b = "e";
    while((p = f(a,b))!=a)
    puts(p);


} 

while(p[i]&& s[j])
的条件是永真的吗?

  • 写回答

2条回答 默认 最新

  • HockerF 2020-01-16 21:52
    关注

    哥子,其实前两天就看到你的问题的,结果没有回答,网页还在这里,我也来帮你理一下思路

    #include <stdio.h>
    #include <string.h>
    char * f(char p[], char s[])
    {
        static int i = 0;     // 注意这个静态变量只赋值一次
        int j = 0;
        while(p[i] && s[j])   // 你问的是这里,是否会死循环,先回答了,肯定不会。 
                                         // 当前有个前提,p和s是字符串, 因为 下面的i++ , 当 p字符串退到最后一个的时候,会是0,就会退出。
                                         // 来看看你的样例 Herehere 和 e 两个的对比,
        if(p[i++] == s[j]) j++;
    
        if(i == strlen(p))   // 如果i指针退到p的最后面,那就重新再来,这里和下面的退出条件有关系  
        i = 0;
        return (p + i);
    
    }
    int main (){
        char * a = "Herehere";
        char * p , * b = "e";
        while((p = f(a,b))!=a) // 这里就很巧妙了,只有 返回值和初始值相等,才能退出
                                           // 我们这里为啥退出,就是因为函数循环到头头,上面有个i=0,相当于 p=a+0 == a, 所以相等,就退出了
            puts(p);
    } 
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已采纳回答 2月6日

悬赏问题

  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案