| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4892 人关注过本帖
标题:编写一个求字串的函数sub_str(char *s1,char *s2,int m,int n),作用是将字符 ...
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册


图片附件: 游客没有浏览图片的权限,请 登录注册


图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 TonyDeng 于 2012-1-11 14:49 编辑 ]

授人以渔,不授人以鱼。
2012-01-11 14:46
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用TonyDeng在2012-1-11 14:46:15的发言:
很感谢,真的,明白这节知识点了。如果按数组下标的方式来传递字符,高手请告之漏洞在什么地方啊?

认为事物非黑即白是缺智慧的表现……
2012-01-11 19:59
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用TonyDeng在2012-1-11 14:46:15的发言:
我是这样理解的,你看对不对。如果是按指针s2+l2-1)++=(s1+m-1)++;这样做算法上没问题,但是由于s1,s2都是定义的char型指针变量,如果在在表达式中加上l2,m之类的常量,在编译器中其常量的值就等于扩大了4倍,而如果只是单纯的s2++=s1++,就不会有问题,可以这样理解吗?

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

我是这样理解的,你看对不对。如果是按指针s2+l2-1)++=(s1+m-1)++;这样做算法上没问题,但是由于s1,s2都是定义的char型指针变量,如果在在表达式中加上l2,m之类的常量,在编译器中其常量的值就等于扩大了4倍,而如果只是单纯的s2++=s1++,就不会有问题,可以这样理解吗?
貌似单纯的s2++=s1++也有问题耶,晕。

认为事物非黑即白是缺智慧的表现……
2012-01-11 20:08
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你這個算法,假設語法沒有問題,撇開小細節,漏洞主要在沒有考慮m和n與數組的關係。比如,m超界了,或者m+n超界了。用這個題目的例子,我待會在你另外帖子上給你講一下,就是如何學那個。

授人以渔,不授人以鱼。
2012-01-11 20:59
liao06550107
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:111
专家分:696
注 册:2011-10-2
收藏
得分:3 
程序代码:
#include <stdio.h>
#include <string.h>

void sub_str(char *s1 ,char *s2 ,int m ,int n)
{
    int l2 ,i;
    char *p1 ,*p2;
    
    l2 = strlen(s2);
    p1 = s2 + l2;//p1指向s2的'\0'
    p2 = s1 + m - 1;
    for(i=1 ;i<=n ;i++) //增量运算符所作用的运算对象只能是变量,不能是常量或由运算符构成的表达式。
    {                  //例如,(x+y)++、++5 都是不正确的。 增量运算符作用于
        *p1++ = *p2++;  //变量以后,与变量一起构成了一个新的表达式──增量表达式。
    }                  //增量表达式不能出现在赋值表达式的左边。例如,i++=1 是不允许的。
    *p1 = '\0';    
    printf("%s\n" ,s2);
}

int main()
{
    int m = 0, n = 0;
    char a[80] ,b[80];
    printf("输入字符串1:\n");
    gets(a);
    printf("输入字符串2:\n"); 
    gets(b);
    printf("输入m和n的值例如:2,2\n");
    scanf("%d,%d",&m ,&n);
    sub_str(a ,b ,m ,n);
    return 0;
}

听不同的音乐,看不同的书,游历不同的城市,邂逅不同的人,走的多了,站的高了,自然就看的远了。
2012-01-11 21:20
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用TonyDeng在2012-1-11 20:59:02的发言:

你這個算法,假設語法沒有問題,撇開小細節,漏洞主要在沒有考慮m和n與數組的關係。比如,m超界了,或者m+n超界了。用這個題目的例子,我待會在你另外帖子上給你講一下,就是如何學那個。
嗯。静候,这两天接受的新知识确实较多,思路有点紊乱了,呵呵

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

#include  
#include  
 
void sub_str(char *s1 ,char *s2 ,int m ,int n)
{
    int l2 ,i;
    char *p1 ,*p2;
     
    l2 = strlen(s2);
    p1 = s2 + l2;//p1指向s2的'\0'
    p2 = s1 + m - 1;
    for(i=1 ;i<=n ;i++) //增量运算符所作用的运算对象只能是变量,不能是常量或由运算符构成的表达式。
    {                  //例如,(x+y)++、++5 都是不正确的。 增量运算符作用于
        *p1++ = *p2++;  //变量以后,与变量一起构成了一个新的表达式──增量表达式。
    }                  //增量表达式不能出现在赋值表达式的左边。例如,i++=1 是不允许的。
    *p1 = '\0';     
    printf("%s\n" ,s2);
}
 
int main()
{
    int m = 0, n = 0;
    char a[80] ,b[80];
    printf("输入字符串1:\n");
    gets(a);
    printf("输入字符串2:\n");  
    gets(b);
    printf("输入m和n的值例如:2,2\n");
    scanf("%d,%d",&m ,&n);
    sub_str(a ,b ,m ,n);
    return 0;
}
嗯,你这里用的是字符传递。呵呵,看来小弟我基础确实搓

认为事物非黑即白是缺智慧的表现……
2012-01-11 21:42
快速回复:编写一个求字串的函数sub_str(char *s1,char *s2,int m,int n),作用是 ...
数据加载中...
 
   



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

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