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日

悬赏问题

  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)