| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2888 人关注过本帖
标题:关于指针数组的c语言程序题,请大家帮帮忙看看哪里不对,谢谢!
只看楼主 加入收藏
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 29楼 FATALIZM
你这个帖子已经结贴了,如果有新问题可以重新开一个新帖子提问,这样更容易得到帮助。今天这会事情有点多,等忙完这阵再给你看下哈,不好意思
2016-07-08 10:06
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
收藏
得分:0 
回复 29楼 FATALIZM
在你的基础上修改了点。

#include<stdio.h>
void loc(char *str1,char *str2)
{
    int i,j,p,k,a;
    for(i=0;str1[i]!='\0';i++)//主串遍历
    {
        a = i;
     for(j=0;str2[j]!='\0';j++)//模式串遍历
     {
         if (str1[i]==str2[j])
         {
            i++;
            k=i;//k代表目前主串长度
            p=j+1;//p表示目前模式串长度
         }
         else
         {
            j=0;//失配后模式串从头开始
            break;
         }
     }
     if(str2[j]=='\0' || str1[i]=='\0')//串结束
            break;

     i = a;//主串从上一次的后一位开始比较
    }
a=k-p+1;
if(str2[j]=='\0')//模式串结束说明匹配成功
    printf("%d\n",a);
else
    printf("匹配失败!\n");
}
void main()
{
char str2[]="woshiyigedahaoren";
char str1[]="yi";
loc(str2,str1);
}
2016-07-08 10:17
FATALIZM
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-6-28
收藏
得分:0 
回复 30楼 吹水佬
请版主能不能不用 #include<string.h>来做,或者和我说说我哪里错了,因为我们不准用那个函数库,我也不会用,所以...麻烦大家了!!
2016-07-08 13:42
FATALIZM
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-6-28
收藏
得分:0 
回复 32楼
恩恩,真的麻烦你了,太不好意思了,麻烦了,谢谢!!
2016-07-08 13:45
FATALIZM
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-6-28
收藏
得分:0 
回复 32楼 word123
#include<stdio.h>
loc(char *str1,char *str2)
{int i,j,p,k,a;
for(i=0;str1[i]!='\0';i++)
{
     for(j=0;str2[j]!='\0';j++)
     {
     if (str1[i]==str2[j])
     {
        i++;
        k=i;
        p=j+1;
     }
     else
     j=0;
     break;
     }
}
a=k-p+1;
if(str2[j]!='\0')
printf("\n%d",a);
else
printf("str2未在str1存在");
}
main()
{int i;
char str1[]="woshiyigedahaoren";
char str2[]="ren";
for(i=0;str2[i]!='\0';i++)
printf("%c",str2[i]);
printf("\n");
for(i=0;str1[i]!='\0';i++)
printf("%c",str1[i]);
loc(str1,str2);

   
   
   
}
我也改了一点,请你方便的时候看看,字符串2存在与1中的时候程序显示结果运行正确,但是如果2不在1里就显示不对了,乱七八糟的显示
2016-07-08 14:10
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用FATALIZM在2016-7-8 13:42:46的发言:

请版主能不能不用 #include<string.h>来做,或者和我说说我哪里错了,因为我们不准用那个函数库,我也不会用,所以...麻烦大家了!!

不准用string函数库也无所谓,用到的相关函数自己写也不难。
2016-07-08 14:12
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 36楼 吹水佬
程序代码:
#include<stdio.h>

int _StrLen(char *str)
{
    char *p = str;
    while (*p++ != '\0') NULL;
    return p-str-1;
}

int _StrnCmp(char *str1, char *str2, int len)
{
    for (int i=0; i<len; i++)
    {
        if ((str1[i]!=str2[i]) || (str1[i]=='\0') || (str2[i]=='\0')) 
        {
            return -1;
        }
    }
    return 0;
}

int loc(char *str1,char *str2)
{
    char *p = str1;
    int len = _StrLen(str2);
    if (len == 0)
    {
        return 0;
    }
    while (*p != '\0')
    {
        if (_StrnCmp(p, str2, len) == 0)
        {
            return p-str1+1;
        }
        p++;
    }
    return 0;
}

main()
{
    char str1[]="woshiyigedahaoren";
    char str2[]="yi";
    int k = loc(str1, str2);
    if (k > 0)
        printf("%d\n", k);
    else
        printf("没找到\n");
}
2016-07-08 14:32
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
收藏
得分:0 
回复 35楼 FATALIZM
就算这样匹配还是会有问题   你试一试str1=wwo ,str2=wo.
就是你的程序内循环每次比较完,str1的第一个比较字符没有回退到上次比较的第一个字符的下一个字符。

而且字符串str2或str1比较完了没有及时退出,最后else j=0;执行后退出,导致下面的if(str2[j]!='\0')永远为真。
2016-07-08 20:08
FATALIZM
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-6-28
收藏
得分:0 
恩恩,好的,我试试!
2016-07-09 08:58
快速回复:关于指针数组的c语言程序题,请大家帮帮忙看看哪里不对,谢谢!
数据加载中...
 
   



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

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