| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 501 人关注过本帖
标题:字符串截取以及对比问题,望指正!
只看楼主 加入收藏
wjfko
Rank: 1
等 级:新手上路
帖 子:15
专家分:3
注 册:2012-2-19
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:6 
字符串截取以及对比问题,望指正!
编写一个函数string_search(char str1[],char str2[]),如果字符串str1包含字符串str2,就返回1,否则返回0.

我的想法是这样的:从str1的第一个字符开始和str2的首字符比较,如果相同,则从str1里面截取和str2相同个数字符的一段字符串c与str2作比较,如果完全一样就返回1;如果到最后能截取和str2相同长度的字符串还没有找到和str2相同的,那这之后的就不用对比了,因为不够长了。
代码如下:
#include<stdio.h>
#include<string.h>
int string_search(char str1[],char str2[])
{
 int i,j,k,m,n;
 char c[20];
 m=strlen(str1);
 n=strlen(str2);
  for(i=0;i<m-n;i++)
   if(str1[i]==str2[0])        
   {
     for(k=0;k<n;k++) c[k]=str1[i+k];
     c[n]='\0';
     if(strcmp(str2,c)==0)
     return 1;
   }
   return 0;
}
void main()
{
 char str1[20],str2[20];
 gets(str1);
 gets(str2);
 printf("%d\n"string_search(str1,str2));
}

但是一直都编译不通过,不知道问题出在哪里,希望大家帮忙看看,谢谢!


[ 本帖最后由 wjfko 于 2012-2-28 12:10 编辑 ]
搜索更多相关主题的帖子: include 字符串 
2012-02-28 10:45
tangtangt
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:146
注 册:2012-1-22
收藏
得分:7 
编译没通过是因为最后printf("%d\n"string_search(str1,str2))中间少了个逗号。
还有我觉得for(i=0;i<m-n;i++)貌似应该是i<= m - n
2012-02-29 16:16
litaonh
Rank: 1
等 级:新手上路
帖 子:3
专家分:7
注 册:2011-9-29
收藏
得分:7 
我觉得用指针比较容易实现。
2012-02-29 22:01
litaonh
Rank: 1
等 级:新手上路
帖 子:3
专家分:7
注 册:2011-9-29
收藏
得分:0 
void findstr( char *str,char *strsub)
{
    char *p,*q;
    int i=0,j=0;
    p=str;
    q=strsub;
    while(*p)
    {
        j=0;
        while(*p&&*q&&*p==*q)
        {
            p++;
            q++;
            j++;
        }
        if(*q=='\0')
        {
            i++;
            p=p-j+1;
            q=q-j;
        }
        else
        {
            p=p-j+1;
            q=q-j;
        }
        
    }
    printf("%d\n",i);
}
这是我以前写的查找一个串在另一个串中出现的次数的例子,希望对你有用。
2012-02-29 22:08
魏林诚
Rank: 2
等 级:论坛游民
帖 子:8
专家分:32
注 册:2012-2-29
收藏
得分:7 
#include<stdio.h>
#include<string.h>
int string_search(char str1[],char str2[])
{
int i,k,m,n;
char c[20];
m=strlen(str1);
n=strlen(str2);
  for(i=0;i<m-n;i++)
   if(str1[i]==str2[0])        
   {
     for(k=0;k<n;k++) c[k]=str1[i+k];
     c[n]='\0';
     if(strcmp(str2,c)==0)
     return 1;
   }
   return 0;
}
void main()
{
char str1[20],str2[20];
gets(str1);
gets(str2);
printf("%d\n",string_search(str1,str2));
}


改好的代码,自己看
2012-02-29 22:13
wjfko
Rank: 1
等 级:新手上路
帖 子:15
专家分:3
注 册:2012-2-19
收藏
得分:0 
根据你们的提示改正之后结果还是不对

然后看了指针的教学视频,发现里面也有一个同样的练习题,就另外想了一个算法

题目是:编写一个函数string_in(char *str1,char *str2),如果字符串str1中包含字符串str2,则返回数值1,否则返回数值0。

代码如下:
#include <stdio.h>
#include <string.h>

int string_in(char *str1,char *str2)
{
    char *p,*q;
    p=str1;//p指向str1
    q=str2;//q指向str2
    for(;*p!='\0';)
        for(;*q!='\0';)
        {
            p++;//指针p指向下一个元素
            if(*p==*q)//如果两个元素相同
            q++;//指针q就指向下一个元素
            else
            q=str2;//不同的时候指针q返回str2的第一个元素
        }
    if(*q=='\0')return 1;//循环结束后如果指针q指向了\0,证明str2被str1包含
    else return 0;//否则就没有被包含
}
void main()
      {
       char str1[20],str2[20];
       char *s1=str1,*s2=str2;
       gets_s(str1);
       gets_s(str2);
       printf("%d\n",string_in(s1,s2));
      }


可惜还是没有通过,现在不在学校了,自学没有老师可以问,所以只好来求助于大家!
2012-03-01 12:31
wjfko
Rank: 1
等 级:新手上路
帖 子:15
专家分:3
注 册:2012-2-19
收藏
得分:0 
再仔细想了想,不应该搞两个for循环嵌套,应该是任意一个指针指向\0循环就结束,而且q返回指向str2的第一个元素的时候,q应该只是指向第一次循环的下一个元素,所以我又引入了一个中介指针r用来修正,最后编译通过,代码如下:

#include <stdio.h>
#include <string.h>

int string_in(char *str1,char *str2)
{
    char *p,*q,*r;
    r=p=str1;//p指向str1
    q=str2;//q指向str2
        for(;*p!='\0'&&*q!='\0';)
        {
            p++;//指针p指向下一个元素
            if(*p==*q)//如果两个元素相同
            q++;//指针q就指向下一个元素
            else
            {
            q=str2;++r;p=r;//q返回指向str2的首元素,p忽略之前的移动,只往下走一格
            }
        }
    if(*q=='\0')return 1;//循环结束后如果指针q指向了\0,证明str2被str1包含
    else return 0;//否则就没有被包含
}
void main()
      {
       char str1[20],str2[20];
       char *s1=str1,*s2=str2;
       gets_s(str1);
       gets_s(str2);
       printf("%d\n",string_in(s1,s2));
      }
2012-03-01 12:55
快速回复:字符串截取以及对比问题,望指正!
数据加载中...
 
   



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

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