| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3632 人关注过本帖
标题:请教一个C语言中字符串1中有没有包含字符串2的问题
只看楼主 加入收藏
snr108
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:39
专家分:60
注 册:2009-9-14
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
请教一个C语言中字符串1中有没有包含字符串2的问题
字符串1中没有包含字符串2的内容。。我写出来后经过测试,在三十以内的中文可以有99%不出错,而在输入英文状态的时候要不重复的不错,如果一重复出错率就相当高..原因到现在也没搞清楚..那位高手帮我看下..多谢了
#include<stdio.h>
#include<string.h>
char strbj(char a[],char b[])
{
    int m,n,i,j;
    m=strlen(a);//求字符长度
    n=strlen(b);
    if (m<n) {printf("no\n字符串1中没有包含字符串2的内容");return 0;}
    else
    {
        for (i=0;i<m;i++)
        {
            if (b[0]==a[i])
            {
                for (j=1;j<n;j++,i++)
                if (b[j]!=a[i+1])//如果b[j]和a[i]不相合,那么跳出,否则继续j++
                    break;
            }
        }
    }
        if (j==n)printf("yes\n其中字符串1中包含了字符串2的内容");
        else printf("no\n字符串1中没有包含字符串2的内容");
        return 0;

}
main()
{

    char a[200],b[150];
    int i,j;
    scanf("%s",a);
    scanf("%s",b);
    strbj(a,b);
getch();
}
也就是说这个出错是随机的..

[ 本帖最后由 snr108 于 2009-9-15 04:48 编辑 ]
搜索更多相关主题的帖子: 字符 C语言 
2009-09-15 11:46
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:5 
主要在循环里改动一下就可以了。
for (i=0;i<m;i++)
        {
            if (b[0]==a[i])
            {
             for (j=1;j<n;j++)   /* 原来的i++ 去掉了*/
               if (b[j]!=a[i+j])   /* 原来的a[i+1]改a[i+j] */
                   break;

             if(j==n)break;   /* 多加的,只要1字符串包含2字符串就退出循环,这里是退外层循环 */
            }
 
        }

[ 本帖最后由 UserYuH 于 2009-9-15 12:20 编辑 ]

努力—前进—变老—退休—入土
2009-09-15 12:12
atom_09
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:92
专家分:141
注 册:2009-8-24
收藏
得分:0 
#include<stdio.h>
#include<string.h>
int main()
{
    char str1[10],str2[10];
    scanf("%s",str1);
    scanf("%s",str2);
    if(strstr(str1,str2))
        printf("str2 is in str1!");
    else  
        printf("str2 is not in str1!");
}
2009-09-15 12:48
snr108
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:39
专家分:60
注 册:2009-9-14
收藏
得分:0 
二楼说的不错..这样改确实不错..不过有一点没明白:
在这之中:
for (i=0;i<m;i++)  
        {  
            if (b[0]==a[i])  
            {  
             for (j=1;j<n;j++)   /* 原来的i++ 去掉了-----*/
               if (b[j]!=a[i+j])   /* 原来的a[i+1]改a[i+j] */
                   break;  
 
             if(j==n)break;   /* 多加的,只要1字符串包含2字符串就退出循环,这里是退外层循环 */
            }  
 
        }
那就是以前的i++为什么不可以呢?照说j++后i++和i+j是一样的啊..我试过..如果在for (j=1;j<n;j++,i++)后面加上一个getch();停顿一下就不会出错..不加就出错了..这是什么原因????  

2009-09-15 14:28
snr108
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:39
专家分:60
注 册:2009-9-14
收藏
得分:0 
三楼编的是对的..不过我这问题主要是自己编的函数语句.而不是系统自带的
2009-09-15 14:29
snr108
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:39
专家分:60
注 册:2009-9-14
收藏
得分:0 
我又试了一下...
最后一句加上你说的那一句如果相等就跳出..(if(j==n)break;)就可以按我以前编的写了..但是我想不出为什么这样..因为如果是相当不跳出去继续比较..比较什么?'\0'??如果是的话以前中文和随机不出错的英文就没法解释..很迷茫..那位指点一下..
2009-09-15 14:38
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:15 
我说下i++为什么不可以吧。下面两个字符串,很明显1字符串包含2字符串,但你的程序却判断不出来。
如1字符串:AAAAB
  2字符串:AAAB
for (i=0;i<m;i++)
  {
    if (b[0]==a[i])   /* 比较1、2字串第一字符A,相等。往下 */
      {
        for (j=1;j<n;j++,i++)
           if (b[j]!=a[i+1])   /* i=0,第二次比较也相等,i增1,    第三次也相等,i再增1,现在i值为2,
第四次不相等退出内循环,到外层时i增1,i等于3,这时是从1字符串的第四个A开始比较,这样就错误了。 */
               break;
      }
  }

·
还有一点,如不加个if(j==n)break;语句,当你2字串在1字串找都相等时再继续找往后找,如后面都不匹配了,j==n不会成立,在你的两个循环外的if(j==n)语句就判断不出来之前已有找到过。

努力—前进—变老—退休—入土
2009-09-15 15:25
snr108
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:39
专家分:60
注 册:2009-9-14
收藏
得分:0 
多谢了,正是这样...原来是数值变化了
2009-09-15 16:57
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:0 
string s1 ,s2;
s1.find(s2,0);
2009-09-15 17:13
快速回复:请教一个C语言中字符串1中有没有包含字符串2的问题
数据加载中...
 
   



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

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