| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2155 人关注过本帖
标题:关于strstr函数和字符串中有另一个字符串的两个问题,分全送哈
只看楼主 加入收藏
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
结帖率:84.38%
收藏
已结贴  问题点数:20 回复次数:6 
关于strstr函数和字符串中有另一个字符串的两个问题,分全送哈
问题1:这是strstr函数的原型,求解是什么如何理解,算法是什么理解的?(strstr函数 功能:找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。   返回值:返回该位置的指针,如找不到,返回空指针。)
char *strstr(const char *s1, const char *s2)   
      {    
     int n;   
     if (*s2)   
       {   
      while (*s1)   
        {
      for (n=0; *(s1 + n) == *(s2 + n); n++)   
        {   
        if (!*(s2 + n + 1))   
           return (char *)s1;   
         }   
               s1++;   
         }   
          return NULL;  
         }   
          else   return (char *)s1;   
         }
问题2:如果字符串str1包含字符串str2,返回1,
这是百度里面有个人写的函数,求解算法是什么理解的。算法是怎么理解的,如还有关于此问更好的算法,求跟帖

int string_search(char str1[], char str2[])
{
int i,j;
int len1,len2;
i=0;
while(str1[i++]!='\0')
{
len1=i;
}
i=0;
while(str2[i++]!='\0')
{
len2=i;
}
i=0;
while(i<=len1-len2)
{
j=0;
while(str1[i+j] == str2[j] && j<len2)
{
if(j == len2-1) return 1;
j++;
}
i++;
}
return 0;
}


[ 本帖最后由 a271885843 于 2012-1-8 22:11 编辑 ]
搜索更多相关主题的帖子: return 字符串 如何 
2012-01-08 22:07
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:10 
char *strstr(const char *s1, const char *s2)  

{    
    int n;
  
       if (*s2)            // s2 第一个字符不是空 进行下面的操作
           
       {   
          while (*s1)         //  s1  不是结束符作为循环条件
               
          {
               for (n=0; *(s1 + n) == *(s2 + n); n++)    //  s1  s2 从第一个字符开始比较并同时往下移一个字符
                   
               {   
                 if (!*(s2 + n + 1))   //  经过上面的for循环,如果能比较到s2的末尾,就把s1(也就是和s2首字符相比较的那个指针位置)返回
                      
                   return (char *)s1;     
                    
               }   
              
             s1++;                   //  如果for循环在s2还没到最后一个字符就提前结束,说明刚才的比较不合符要求,s1 往下移一个单位。重新进入for循环。
          }

          return NULL;      //   s2 第一个字符是空的 返回空指针
                 
       }  
          
      else   return (char *)s1;     //  指针函数返回一个指针,就是合符要求的结果
           
}




[ 本帖最后由 有容就大 于 2012-1-9 08:05 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-01-09 08:01
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
理解第一个就能理解第二个。
第二个还简单些, 只要判断,不要返回位置指针。

梅尚程荀
马谭杨奚







                                                       
2012-01-09 08:10
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用有容就大在2012-1-9 08:01:17的发言:

char *strstr(const char *s1, const char *s2)  

{    
    int n;
  
       if (*s2)            // s2 第一个字符不是空 进行下面的操作
           
       {   
          while (*s1)         //  s1  不是结束符作为循环条件
               
          {
               for (n=0; *(s1 + n) == *(s2 + n); n++)    //  s1  s2 从第一个字符开始比较并同时往下移一个字符
                   
               {   
                 if (!*(s2 + n + 1))   //  经过上面的for循环,如果能比较到s2的末尾,就把s1(也就是和s2首字符相比较的那个指针位置)返回
                      
                   return (char *)s1;     
                    
               }   
              
             s1++;                   //  如果for循环在s2还没到最后一个字符就提前结束,说明刚才的比较不合符要求,s1 往下移一个单位。重新进入for循环。
          }

          return NULL;      //   s2 第一个字符是空的 返回空指针
                 
       }  
          
      else   return (char *)s1;     //  指针函数返回一个指针,就是合符要求的结果
           
}
嗯,能够理解,我还有个问题就是判断字符串str2结束的标志   if (!*(s2 + n + 1))这个该如何理解,能否用if(*(s2+n+1)=='\n')来判断,其实我最主要的问题就是,比如if (*s2)这中控制语句,if(),whlie(),在这里他里面是一个指针的字符,我的疑问就是在判断语句中如if(),while()之类,括号里的值,除了用关系表达式值为真或假以外,还能是其他什么?这里是一个不为结束标志的字符,怎么理解啊,求解求解

[ 本帖最后由 a271885843 于 2012-1-9 12:39 编辑 ]

认为事物非黑即白是缺智慧的表现……
2012-01-09 12:32
编程的乐趣
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:229
专家分:1027
注 册:2011-4-4
收藏
得分:10 
.
2012-01-09 12:39
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用编程的乐趣在2012-1-9 12:39:10的发言:

.
吸烟有害健康

认为事物非黑即白是缺智慧的表现……
2012-01-09 12:39
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
还有就是。第二个
while(str1[i+j] == str2[j] && j<len2)
{
if(j == len2-1) return 1;
j++;
}
i++;
这部分内容确实没看懂,求解

认为事物非黑即白是缺智慧的表现……
2012-01-09 15:57
快速回复:关于strstr函数和字符串中有另一个字符串的两个问题,分全送哈
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012949 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved