| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1102 人关注过本帖
标题:c和指针的一道题目:
只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:20 回复次数:29 
c和指针的一道题目:
1、函数声明 void reverse_string(char* string) 不得改动
2、不得声明一个局部数组来临时存储字符串
3、要使用指针操作字符串而不是使用数组下标
4、这也是最纠结的一个部分,原话“函数把参数字符串中的字符反向排列”

初步考虑  首尾替换法 然后指针分别自增 自减 十分简单
可惜char* string 这个属于常量字符串  是不能被修改的

后来考虑到一个变通方法,那就是在子函数中直接输出字符串中的单个字符
因为是逆序,所以想到了递归  但是我这个程序不对呢
程序代码:
#include <stdio.h>

void reverse_string(char* string)
{
    if(*string==NULL)
    {
        return;
    }
    *string++;
    reverse_string(string);
    printf("%c",(char)*string);
}
int main()
{
    char *test="ABC";
    reverse_string(test);
    return 0;
}
输出为“ CB”多了一个空格 少了一个A
收到的鲜花
  • 寒风中的细雨2012-12-01 11:20 送鲜花  10朵   附言:Lz这指针还需多练练......
搜索更多相关主题的帖子: 字符串 
2012-12-01 08:51
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:4 
可惜char* string 这个属于常量字符串  是不能被修改的。
这句话是题目里的还是你自己想象出来的?

总有那身价贱的人给作业贴回复完整的代码
2012-12-01 09:28
rjvsky
Rank: 3Rank: 3
来 自:陕西西安
等 级:论坛游侠
帖 子:77
专家分:106
注 册:2012-3-6
收藏
得分:4 
程序代码:
#include <stdio.h>

void reverse_string(char* string)
{ 
    *string++;//要先判断字符串是否到末尾,如果到末尾,则不进行出理。
    if(*string==0)
    {
        return;
    }
    reverse_string(string);
    printf("%c",*string);
}
int main()
{
    char *test="ABCdgff";
    reverse_string(test);
    printf("%c",*test);//此处修改!!因为你所有的调用不是在子函数中的,所以在主函数中要加一次输出。
    return 0;
}

企业需要的人才,是真正可以给他们带来经济效益的人,而不是一大堆没用的证书,看淡证书,强化自己···
2012-12-01 11:13
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:4 
回复 楼主 wp231957
程序代码:
#include <stdio.h>

void reverse_string(const char* const string)

 {
     if(0 == *string)
     {
         return;
     }
     reverse_string(string+1);
     printf("%c", *string);

 }

 int main()

 {
     char *test = "ABC";
     reverse_string(test);
     printf ("\n");
     return 0;

 }
收到的鲜花
  • qunxingw2012-12-01 13:55 送鲜花  10朵   附言:学习
2012-12-01 11:18
rjvsky
Rank: 3Rank: 3
来 自:陕西西安
等 级:论坛游侠
帖 子:77
专家分:106
注 册:2012-3-6
收藏
得分:0 
回复 4楼 寒风中的细雨
对啊 ,我怎么就没想到呢,真是高手啊!不过我想知道你为什么要将判断写成0 == *string呢?写成*string == 0不更好理解吗?

企业需要的人才,是真正可以给他们带来经济效益的人,而不是一大堆没用的证书,看淡证书,强化自己···
2012-12-01 11:28
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
回复 5楼 rjvsky
理解起来不都是一样的么   不都是判断相等么  而且挺刺眼的因为我们习惯了看赋值操作!
2012-12-01 11:39
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:4 
其实也可以不用递归,毕竟递归有很多不好的地方:
程序代码:
#include <stdio.h>
#include <string.h>

void reverse_string(char const* const string);

int main(void)
{
    char *string = "ABC";
   
    reverse_string(string);
    return 0;
}

void reverse_string(char const* const string)
{
    int i = 0;
   
    for(i=strlen(string)-1;i>=0;i--)
        printf("%c",*(string+i));
    printf("\n");
    return;
}

这样理解起来也简单点,同时也没有改动值

I have not failed completely
2012-12-01 12:00
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
楼上的各位,题目第一点要求都没看吧

总有那身价贱的人给作业贴回复完整的代码
2012-12-01 12:26
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
名字改不改都可以运行,只不过楼主说是常量指针我怕在运行是会无意修改内容或地址才加的,如果不想要的会去掉就是了...

I have not failed completely
2012-12-01 12:30
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
我在二楼提的问题你也可以想一下

总有那身价贱的人给作业贴回复完整的代码
2012-12-01 12:43
快速回复:c和指针的一道题目:
数据加载中...
 
   



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

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