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


append.c:
程序代码:
int main()
{
    char s[MAX_STR_LEN], str[MAX_STR_LEN];
    gets(s);
    puts(str_rev(str, s));
    puts(str);
    return 0;
}


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


以上是我做的。。以证明不是无脑求  老师说自定义函数哪里用char *就行,但是既然是两个字符串,用char *我就不明白怎么区分str 和 s了。。求指教或者我自己琢磨答案。。
搜索更多相关主题的帖子: 字符串 
2013-01-14 13:38
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
老师说我函数声明还没搞懂。。其实我想说我指针数据结构也不会
2013-01-14 13:40
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:7 
char * str_rev(char *str, char *s)

授人以渔,不授人以鱼。
2013-01-14 13:42
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
以下是引用TonyDeng在2013-1-14 13:42:32的发言:

char * str_rev(char *str, char *s)

char *str的意思是str[0]还是str[0]的地址?
2013-01-14 13:48
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
回复 3楼 TonyDeng
我们老师说不用改 而且其他几个指针题也都直接是int *,int * 我就去了 这怎么弄
2013-01-14 13:49
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
char* s就是指向数组的入口指针,你按我说的函数原型改就是了。在函数里面,把s视为数组,用s[i]访问数据即可。

授人以渔,不授人以鱼。
2013-01-14 13:51
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
回复 6楼 TonyDeng
程序代码:
#include <stdio.h>
#include <string.h>
#define MAX_STR_LEN 101
char * str_rev(char *str, char *s)
{
    int len,len1,i;
    len=strlen(s);
    len--;
    len1=len;
    str+=len;
    for(i=0; i<len; i++)
    {
        str[len1]=s[i];
        len1--;
    }
    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-14 13:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
字符串用'\0'结束,你的在哪?

授人以渔,不授人以鱼。
2013-01-14 14:04
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:7 
这几条语句是要干吗?len--;len1=len;str+=len;

总有那身价贱的人给作业贴回复完整的代码
2013-01-14 14:06
黄昏黄昏
Rank: 2
等 级:论坛游民
帖 子:49
专家分:41
注 册:2013-1-10
收藏
得分:7 
你这段代码能通过编译???
函数定义那里char * str_rev(char *str[], char *s[]) ,形参和你传入的实参类型根本不一样,main里你传入的是*型,而这里是**型;
    int s1,i;  
    str=s1=s;   //指针不是整型,内存地址的表示也不是int型,这里的表示错了;
return *str;   //你定义的函数返回值类型是char*型的 ,而这个语句表示返回的字符串str的第一个字母,类型不符合


得不到的永远在骚动,被偏爱都有恃无恐
2013-01-14 14:58
快速回复:问个指针的题。。。不是无脑求答案。。
数据加载中...
 
   



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

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