| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 782 人关注过本帖
标题:个位前辈帮我看个字符串
只看楼主 加入收藏
代号阿杰
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-12-2
结帖率:0
收藏
已结贴  问题点数:20 回复次数:7 
个位前辈帮我看个字符串
原本要求是要求输入字符串A,还有字符串B,判断B是否是A的子字符串,如果是的话就把B显示出来,如果不是的话就重新输入
我自己写了这个代码,但是只有把第一个字母包含进去的子字符串是对的其他好多不对,个位前辈帮我看下是哪里出问题了,代码里那些11111\22222是为了测试方便而写的,前辈勿笑.
#include<stdio.h>
#include<stdlib.h>

int fine(char[],char[],int);
void main()
{
    char a[40];
    char b[40];
    int conut1;
    int repeat;
   
    printf("请输入一段字符a:");
    gets(a);
    printf("输入的a是:%s\n",a);
   
    to:printf("请输入一段字符b:");
    gets(b);
    for(conut1=0; b[conut1]; conut1++);//奶奶的分号
    printf("b的长度是%d个字符\n",conut1);
    repeat=fine(a,b,conut1);//是否满足重新输入条件
    if(!repeat)
    goto to;
}   
int fine(char a[40],char b[40], int conut1)
{
    int conut2;
    int conut3;
    int conut4;
    int flag;
    for(conut2=0; a[conut2]==b[0]; conut2++);//找第一个相同的字符
    if(conut2)
    {
        for(conut4=0,conut3=0; conut3<=conut1; conut3++,conut4++)
        {
            if(a[conut2+conut3]==b[conut4])//一样的话就继续比下一个字符
            continue;
            else
            {
                flag=0;
                break;
            }            
        }
        printf("%s是%s的子字符串\n",b,a);
        flag=1;
    }
    else if(!conut2)
    {
        printf("%s不是%s的子字符串22222222\n",b,a);
        flag=0;
    }
    return flag;
}


[ 本帖最后由 代号阿杰 于 2009-12-2 07:18 编辑 ]
搜索更多相关主题的帖子: 字符 前辈 
2009-12-02 07:14
zhuyunshen
Rank: 6Rank: 6
等 级:侠之大者
威 望:2
帖 子:212
专家分:455
注 册:2009-11-22
收藏
得分:5 
1111
2009-12-02 08:08
多多关照
Rank: 2
等 级:论坛游民
帖 子:42
专家分:51
注 册:2009-8-22
收藏
得分:5 
尽量不要使用goto语句吧
2009-12-02 08:28
秋天的童话
Rank: 2
等 级:论坛游民
帖 子:33
专家分:92
注 册:2009-12-1
收藏
得分:5 
你的fine函数逻辑有问题,
for(conut2=0; a[conut2]==b[0]; conut2++);//找第一个相同的字符

上句应该为:
for(conut2=0; a[conut2]!=b[0]; conut2++);//找第一个相同的字符
conut2++;


这样就对了!
2009-12-02 08:32
代号阿杰
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-12-2
收藏
得分:0 
谢谢前辈哈,for(conut2=0; a[conut2]!=b[0]; conut2++);这句是我大意了
但是我弄不明白后面为什么还有个conut2++呢?
2009-12-02 08:55
秋天的童话
Rank: 2
等 级:论坛游民
帖 子:33
专家分:92
注 册:2009-12-1
收藏
得分:0 
回复 5楼 代号阿杰
如果是第一个字符就相同,那么开始conut2==0,在for从句中经判断,条件a[conut2]!=b[0]不符合,退出for循环,此时conut2还是==0,因此下面的if语句执行不进去!
2009-12-02 09:04
hnliji1107
Rank: 4
等 级:业余侠客
帖 子:53
专家分:216
注 册:2009-10-23
收藏
得分:5 
#include "stdio.h"
#include "string.h"
int findstr(char *str1,char *str2)
{
    char *temp1,*temp2;
    int n=0;
    temp1=str1;
    while(*temp1)
    {
        temp2=str2;
        while(*temp2)
        {
            if(*temp2==*temp1)//每个字符比较
            {
                temp2++;
                temp1++;
            }
            else//有不等时推出此次循环并执行temp1++
                break;
            if(*temp2=='\0')//如果遇到结束符计算str2个数
                n++;
        }
    temp1++;//从源字符串的下个字符开始查找
    }
    return(n);
}

int main(void)
{
    char str1[80],str2[3];//子字符串可以修改字符数
    char ch;
    do
    {
        printf("请输入源字符串:");
        scanf("%s",str1);//不能输入空格
     N1:printf("请输入要查询的子字符串:");
        scanf("%s",str2);
        getchar();//吃掉换行符
        if(findstr(str1,str2))
            printf("%s存在\n",str2);
        else
        {
            printf("%s不存在\n",str2);
            goto N1;
        }
        printf("是否继续(y/n)? ");
        ch=getchar();
    }while(ch=='Y'||ch=='y');
        putchar('\0');
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册
      
2009-12-02 09:49
hnliji1107
Rank: 4
等 级:业余侠客
帖 子:53
专家分:216
注 册:2009-10-23
收藏
得分:0 
做人要厚道,上面程序有点缺点,以下是修改后的完善答案:
程序代码:
#include "stdio.h"
#include "string.h"
int findstr(char *str1,char *str2)
{
    char *temp1,*temp2;
    int n=0;
    while(*str1)
    {
        temp1=str1;//修改处
        temp2=str2;
        while(*temp2)
        {
            if(*temp2==*temp1)//每个字符比较
            {
                temp2++;
                temp1++;
            }
            else//有不等时退出此次循环并执行str1++
                break;
            if(*temp2=='\0')//如果遇到结束符计算str2个数
                n++;
        }
    str1++;//从源字符串的下个字符开始查找
    }
    return(n);
}

int main(void)
{
    char str1[80],str2[80];//子字符串可以修改字符数
    char ch;
    printf("请输入源字符串:");
    gets(str1);
    do{
        printf("请输入要查询的子字符串:");
        scanf("%s",str2);
        getchar();//吃掉换行符
        if(findstr(str1,str2))
            printf("%s存在\n",str2);
        else 
            printf("%s不存在\n",str2);
        printf("是否继续(y/n)? ");
        ch=getchar();
    }while(ch=='Y'||ch=='y');
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册
2009-12-18 15:55
快速回复:个位前辈帮我看个字符串
数据加载中...
 
   



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

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