| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2506 人关注过本帖
标题:求子字符串在父字符串中出现的次数
取消只看楼主 加入收藏
源本云明
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2010-7-1
结帖率:0
收藏
已结贴  问题点数:10 回复次数:1 
求子字符串在父字符串中出现的次数
自己编制了以下一个小程序,挺简单的,但是自己却被搞糊涂了,所以只能向各位来请教,希望大家给予意见,多多益善
我想要的成功程序是:打印出子字符串在父字符串中出现的次数。如:输入 wo shi zhongguoren!ni ye shi!(父串)  shi(字串),回车后就能输出2!程序的运行结果有错误,我知道下面的一段处理过程中可能错了,
         for(i=0;i<ls;i++)
     {
             if(*(p+i)==q[0])  
          {
              for(t=1;t<lc;t++)
            if(*(p+i+t)==*(q+t))
            ++k;
          }
          }
希望大家能帮我指出来,谢谢!程序的运行结果如附图
1.zip (4.77 KB)
所示。父串为yingmingjun,当我输入字串in时,结果是正确的,但是输入ing时,结果却翻倍了变成4。
完整的源代码如下:
#include "stdio.h"
#include "string.h"
int tongji(char *p,char *q)
{
    int i,k=0,t,ls,lc;
     ls=strlen(p);
     lc=strlen(q);
     for(i=0;i<ls;i++)
     {
          if(*(p+i)==q[0])  
          {
              for(t=1;t<lc;t++)
            if(*(p+i+t)==*(q+t))
            ++k;
          }
     }
    return k;
}
void main()
{
    char str[100],c[100];
    printf("请输入字符串和比较字符:\n");
    gets(str);
    gets(c);
    if(strlen(str)<strlen(c))printf("被比较的字符串长度小于比较字符串!操作无法进行!\n");
    else
    puts("\n");
    printf("父字符串的长度是%d\n",strlen(str));
    printf("\n字符串%s在父字符串中出现的次数为%d\n",c,tongji(str,c));
}
搜索更多相关主题的帖子: 字符 
2010-07-02 14:31
源本云明
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2010-7-1
收藏
得分:0 
按照各位的指点,解决了子串中出现次数重复的问题。但是我又发现了一个问题,那就是当子串中的首字符和父串中一样时,就会发生比较。如果不一样的时候,次数不加一,但是后面要定位的字符略过了它们(作比较的字符)。
我不防举个例子:父串中输入yingmingjunining 子串中输入ing,正确的结果应该是3,但是结果却是2,最后一个ing没有被计算进去,
原因肯定是读过yingmingjun 后,当读到i时,首字符相等条件成立,所以就将字符往后推,ini不等于ing,所以不成立。
之后,指向了后面的n,而不再指向前面的i,因ng不等于ing,所以这次没有计数进去。产生了这个错误!怎样才能避免这个问题呢?还请大家点一下,谢谢!
运行结果如附图
1.zip (7.75 KB)
,正确的结果应该是4,可运行结果是3。
源代码:
/* Note:Your choice is C IDE */
#include "stdio.h"
#include "string.h"
int tongji(char *p,char *q)
{
    int i,k=0,t,ls,lc,s=0;
     ls=strlen(p);
     lc=strlen(q);
     if(lc==1)
     {
      for(i=0;i<ls;i++)
      if(*(p+i)==q[0])
      ++s;
     }
     else
     for(i=0;i<ls;i++)
     {
         if(*(p+i)==q[0])
          {
                  for(t=1;t<lc;t++)
                if(*(p+i+t)==*(q+t))
                ++k;if(k==lc-1){++s;k=0;}  
          }
     }
    return s;
}
void main()
{
    char str[100],c[100];
    printf("请输入字符串和比较字符:\n");
    gets(str);
    gets(c);
    if(strlen(str)<strlen(c))printf("被比较的字符串长度小于比较字符串!操作无法进行!\n");
    else
    puts("\n");
    printf("父字符串和子字符串的长度分别是%d和%d\n",strlen(str),strlen(c));
    printf("\n字符串%s在父字符串中出现的次数为%d\n",c,tongji(str,c));
}
2010-07-03 14:43
快速回复:求子字符串在父字符串中出现的次数
数据加载中...
 
   



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

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