| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 527 人关注过本帖
标题:问个指针的问题
只看楼主 加入收藏
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
结帖率:58.82%
收藏
已结贴  问题点数:20 回复次数:9 
问个指针的问题
程序代码:
求字符串逆序
Description

将输入的一个字符串s逆序输出。

编写一个函数str_rev()求一个串的逆序串。

str_rev()的调用格式见append.c,原型如下:

char * str_rev(char *, char *)

参数是字符串s和它的逆序串str,str_rev(str, s)函数调用后,str中存储的串为s串的逆序。

Input

输入为一个串s。输入最少为一个字符,最多不会超过100个字符。

Output

串s的逆序。

输出两遍,一遍是测试返回值,一遍是测试str。

Sample Input

ABCDE
Sample Output

EDCBA
EDCBA
HINT

返回值参考标准库函数strcpy()、strstr()、strchr()的设计思路:返回目标串的首地址。

Append Code

append.c,


程序代码:
#include <stdio.h>
#include <string.h>
#define MAX_STR_LEN 101
char * str_rev(char *str, char *s)
{
    int len,i,len1;
    len=len1=0;
    while(*(s+len)!='\0')
    {
        len++;
    }
    len--;
    len1=len;
    str=s;
    for(len=0;len<len1;len++)
    {
        printf("s:%c\n",*(s+len));
        printf("str:%c\n",*(str+len));
    }
    for(i=0;len>=0;len--)
    {
        *(str+i)=*(s+len);
        i++;
    }
    for(len=0;len<len1;len++)
    {
        printf("s:%c\n",*(s+len));
        printf("str:%c\n",*(str+len));
    }
    return str;
}
int main()
{
    char s[MAX_STR_LEN], str[MAX_STR_LEN];
    gets(s);
    puts(str_rev(str, s));
    puts(str);
    return 0;
}

其中这一段:
程序代码:
for(i=0;len>=0;len--)
    {
        *(str+i)=*(s+len);
        i++;
    }

这里,我本来想着是s不变,然后利用s把str变成s的逆序。
结果调试发现好像是str跟s的对应位置的字符交换位置了。
想不明白
搜索更多相关主题的帖子: 字符串 
2013-01-15 12:26
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
下午要考试啊。。。。
2013-01-15 12:44
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:7 
str=s;
楼主能解释下为什么要加这句话吗?
之后的str还是原来的str吗?

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-15 12:57
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
回复 3楼 yaobao
程序代码:
#include <stdio.h>
#include <string.h>
#define MAX_STR_LEN 101
char * str_rev(char *str, char *s)
{
    int len,i,len1;
    char t;
    len=len1=0;
    while(*(s+len)!='\0')
    {
        len++;
    }
    len--;
    len1=len;
    str=s+200;
    //*str=*s;
    //for(len=0;len<len1;len++)
    //{
    //    printf("s:%c\n",*(s+len));
    //    printf("str:%c\n",*(str+len));
    //}
    for(i=0;len>=0;len--)
    {
        t=*(s+len);
        *(str+i)=t;
        i++;
    }
    //for(len=0;len<len1;len++)
    //{
    //    printf("s:%c\n",*(s+len));
    //    printf("str:%c\n",*(str+len));
    //}
    return str;
}
int main()
{
    char s[MAX_STR_LEN], str[MAX_STR_LEN];
    gets(s);
    puts(str_rev(str, s));
    puts(str);
    return 0;
}


额 这是我又该的,刚刚想的是s跟str的地址重了,后来又想晕了。
现在的问题是puts(str_rev(str, s));输出正确,但    puts(str);这里输出的不对。
2013-01-15 13:15
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
回复 3楼 yaobao
难道要删掉吗?
2013-01-15 13:16
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
回复 3楼 yaobao
程序代码:
#include <stdio.h>
#include <string.h>
#define MAX_STR_LEN 101
char * str_rev(char *str, char *s)
{
    int len,i,len1;
    char t;
    len=len1=0;
    while(*(s+len)!='\0')
    {
        len++;
    }
    len--;
    len1=len;
    for(i=0;len>=0;len--)
    {
        t=*(s+len);
        *(str+i)=t;
        i++;
    }
    *(str+len1+1)='\0';
    return str;
}
int main()
{
    char s[MAX_STR_LEN], str[MAX_STR_LEN];
    gets(s);
    puts(str_rev(str, s));
    puts(str);
    return 0;
}



大哥,碉堡了,哈哈
2013-01-15 13:18
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:7 
6楼的代码貌似没啥问题啊

DO IT YOURSELF !
2013-01-15 13:21
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
回复 3楼 yaobao
是不是说我在函数里的str改了,但在main里的str还没改。。。
2013-01-15 13:21
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
碉堡了???什么意思???不好意思,刚吃饭,没看见回帖

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-15 13:33
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:7 
程序代码:
char * str_rev(char *str, char *s)
{
    int pos = strlen(s) - 1;
    char* p = str;

    while (pos >= 0)
    {
        *p++ = s[pos--];
    }
    *p = '\0';

    return str;
}

授人以渔,不授人以鱼。
2013-01-15 13:34
快速回复:问个指针的问题
数据加载中...
 
   



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

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