| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5045 人关注过本帖
标题:编写一个函数string_in(char *str1,char *str2),如果字符串str1包含字符串s ...
只看楼主 加入收藏
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
结帖率:84.38%
收藏
已结贴  问题点数:12 回复次数:23 
编写一个函数string_in(char *str1,char *str2),如果字符串str1包含字符串str2,则返回数值1,否则返回数值2,还是内存提示出
貌似已经可以运行了,在一个QQ群里有另一个童鞋写了一个更好的算法,等我看看之后跟帖到最后-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------算法有问题。有些字符串能通过判断,有些没有返回值,不知道是不是循环的问题还是什么问题
改进了一下,增加了一个临时str,不过算法还是有问题,有些语句能通过判断,有些语句不能通过判断---------在第二页有更好的算法,有完整的程序,貌似没有bug
# include <stdio.h>
#include"string.h"
int string_in(char* str1,char* str2)
{
    int p,l2;
    char* temstr;
    l2=strlen(str2); //把字符串2的长度赋给l2

    if(*str2)                   // s2 第一个字符不是空 进行下面的操作
    {
        while(*str1)              // s1  不是结束符作为循环条件
    {
            if(*str1==*temstr)       //字符串1和字符串2第一个字符相比,如果相等,做下面的运算
    {
        for(p=0;*(str1+p)==*(temstr+p);p++)       //s1  s2 从第一个字符开始比较并同时往下移一个字符
        {
            while(p>=(l2-1))    //当p自增到把s2跑完的时候,则表示字符串1包含字符串2
            return 1;           //返回1
        }
      
    }
    else if(*str1!='\n')
    {    str1++;
           temstr=str2;} //str1自增,使其找到与str2字符串首字符的字符。                        
    else  return 2 ; //当str1自增到结束的时候,他里面都没有字符串与str1相等,那就返回2
   
    }
    }
    return 2;
}
int main()
{
    char i[80],b[80];
    char* str1=i;
    char* str2=b;
   
    int flag=1,a;
    while(flag==1)
    {
        printf("imput string1 :\n");
        gets(str1);
      
        printf("imput string2 :\n");
        gets(str2);
      
        if(strlen(str1)<strlen(str2))
        {
            flag=1;
            printf("字符串1比字符串2多才对!");
        }
      
        else flag=0;
    }
   
    a=string_in(str1,str2);
   
    printf("%d",a);

    return 0;
   
}



[ 本帖最后由 a271885843 于 2012-1-10 22:12 编辑 ]
搜索更多相关主题的帖子: 内存 算法 字符串 
2012-01-09 13:36
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:12 
char *str1,*str2;
这只是定义指针,没有分配空间

总有那身价贱的人给作业贴回复完整的代码
2012-01-09 13:41
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用embed_xuel在2012-1-9 13:41:35的发言:

char *str1,*str2;
这只是定义指针,没有分配空间
这个应该没问题吧。
#include"stdio.h"
int main(){
    char *a;
    gets(a);
    printf("%s",a);
}
这个小程序就能解释。

认为事物非黑即白是缺智慧的表现……
2012-01-09 13:54
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
妈的搞了半天了,这是最终版本,用cfree一运行,就是一堆二进制代码,头都弄大了

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

认为事物非黑即白是缺智慧的表现……
2012-01-09 15:40
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
我顶我顶

认为事物非黑即白是缺智慧的表现……
2012-01-09 16:10
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用embed_xuel在2012-1-9 13:41:35的发言:

char *str1,*str2;
这只是定义指针,没有分配空间
我想问下,指针没有分配空间,另外我问了些其他论坛,也有人是说没分配空间
#include"stdio.h"
int main(){
    char *a;
    gets(a);
    printf("%s",a);
}这个编译通过
  又怎么理解啊

认为事物非黑即白是缺智慧的表现……
2012-01-09 16:48
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
求解求解!!!

认为事物非黑即白是缺智慧的表现……
2012-01-09 16:51
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用embed_xuel在2012-1-9 13:41:35的发言:

char *str1,*str2;
这只是定义指针,没有分配空间
分配好空间了,然后完成之后再删除内存空间。还是不行啊

认为事物非黑即白是缺智慧的表现……
2012-01-09 17:22
kuangfengjiw
Rank: 2
等 级:论坛游民
帖 子:20
专家分:77
注 册:2011-12-16
收藏
得分:0 
{while(*str1)              // s1  不是结束符作为循环条件
    {if(*str1==*str2)       //字符串1和字符串2第一个字符相比,如果相等,做下面的运算
          {
       for(p=0;*(str1+p)==*(str2+p);p++)       //s1  s2 从第一个字符开始比较并同时往下移一个字符
             {while(p>=(l2-1))    //当p自增到把s2跑完的时候,则表示字符串1包含字符串2
               return 1;           //返回1
               }
            
               }
           else if(*str1!=='\n') str1++; //str1自增,使其找到与str2字符串首字符的字符。                          
           else  return 2 ; //当str1自增到结束的时候,他里面都没有字符串与str1相等,那就返回2

    }
    }//你的if elseif else 当只要输入的两个字符串的第一个字符相同的时候而第一个字符串又不包含第二个字符串的时候是跳不出while的,,因为你进入了第一个if但是又没有return值,但又不会执行else
 2.    char* str=&a[80];//你这里应该是str1 吧,都已经超出了数组范围了。。。应该改为&a吧,才是首地址。。
    char* str2=&b[80];//这里一样。
3.delete str1和delete str2似乎是多余的。。

[ 本帖最后由 kuangfengjiw 于 2012-1-9 18:11 编辑 ]
2012-01-09 18:04
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用kuangfengjiw在2012-1-9 18:04:23的发言:

{while(*str1)              // s1  不是结束符作为循环条件
    {if(*str1==*str2)       //字符串1和字符串2第一个字符相比,如果相等,做下面的运算
          {
       for(p=0;*(str1+p)==*(str2+p);p++)       //s1  s2 从第一个字符开始比较并同时往下移一个字符
             {while(p>=(l2-1))    //当p自增到把s2跑完的时候,则表示字符串1包含字符串2
               return 1;           //返回1
               }
            
               }
           else if(*str1!=='\n') str1++; //str1自增,使其找到与str2字符串首字符的字符。                          
           else  return 2 ; //当str1自增到结束的时候,他里面都没有字符串与str1相等,那就返回2

    }
    }//你的if elseif else 当只要输入的两个字符串的第一个字符相同的时候而第一个字符串又不包含第二个字符串的时候是跳不出while的,,因为你进入了第一个if但是又没有return值,但又不会执行else
 2.    char* str=&a[80];//你这里应该是str1 吧,都已经超出了数组范围了。。。应该改为&a吧,才是首地址。。
    char* str2=&b[80];//这里一样。
3.delete str1和delete str2似乎是多余的。。
嗯。我去改一改。char* str=a;char* str2=b;就行了
delete可要可不要。
关于程序里逻辑的问题,可能算法有点问题,还有就是你说的return问题,我再改改

认为事物非黑即白是缺智慧的表现……
2012-01-09 18:30
快速回复:编写一个函数string_in(char *str1,char *str2),如果字符串str1包含字 ...
数据加载中...
 
   



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

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