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

你这段代码能通过编译???
函数定义那里char * str_rev(char *str[], char *s[]) ,形参和你传入的实参类型根本不一样,main里你传入的是*型,而这里是**型;
    int s1,i;  
    str=s1=s;   //指针不是整型,内存地址的表示也不是int型,这里的表示错了;
return *str;   //你定义的函数返回值类型是char*型的 ,而这个语句表示返回的字符串str的第一个字母,类型不符合

有点晕 能不能说下怎么改?
2013-01-15 08:10
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
回复 9楼 embed_xuel
把字符串的长度记录下,然后我想首地址直接加上长度就是最后一个字符了
2013-01-15 08:12
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
程序代码:
#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 09:02
Sornets
Rank: 2
等 级:论坛游民
帖 子:102
专家分:61
注 册:2012-11-22
收藏
得分:0 
救命。。
2013-01-15 10:40
快速回复:问个指针的题。。。不是无脑求答案。。
数据加载中...
 
   



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

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