| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1102 人关注过本帖
标题:c和指针的一道题目:
取消只看楼主 加入收藏
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
结帖率:99.76%
收藏
已结贴  问题点数:20 回复次数:10 
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
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用embed_xuel在2012-12-1 09:28:47的发言:

可惜char* string 这个属于常量字符串  是不能被修改的。
这句话是题目里的还是你自己想象出来的?
不是题目的 莫非我理解错了吗

却实不能修改啊

DO IT YOURSELF !
2012-12-01 21:22
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
使用STRLEN的同学是不能通过答案的

DO IT YOURSELF !
2012-12-01 21:25
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用寒风中的细雨在2012-12-1 11:18:14的发言:

#include  
 
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;
 }
你这个把那2个const 去掉  就和题目一样了

但是string+1 我不是很理解  能讲一下吗   他指向的是哪里啊

DO IT YOURSELF !
2012-12-01 21:30
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用神龙赖了在2012-12-1 21:33:32的发言:

string+1就是递增地址
就好像*string为字符'A'
*(string+1)就是字符'A'的后面一个字符也就是字符'B’
那起步就是B 然后 C  回溯回来就是CB
那A是怎么弄出来的  
因为最后输出是CBA啊

DO IT YOURSELF !
2012-12-01 21:36
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
使用数组就有违题意了

DO IT YOURSELF !
2012-12-01 21:55
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用有容就大在2012-12-1 22:43:25的发言:

反向排列 就 是 反向输出?
看谁能改掉char *p = "xxoo"里面的东西 ? 很想见识一下。
期待大牛的代码

DO IT YOURSELF !
2012-12-01 22:45
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
如果主函数传入字符串数组的话
代码就可以这样写了:
用了3个临时变量
程序代码:
void reverse_string(char* string)
{
    char* p_begin=string;
    while(*string!=NULL)
    {
        *string++;
    }
    *string--;
    char* p_end=string;
    char tmp;
    while(*p_begin!=*p_end)
    {
        tmp=*p_begin;
        *p_begin=*p_end;
        *p_end=tmp;
        *p_begin++;
        *p_end--;
    }
}

 

DO IT YOURSELF !
2012-12-02 07:24
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
一个++  一个-- 有问题吗

DO IT YOURSELF !
2012-12-02 11:26
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
按照大牛的提示 更正了代码
但是有一点不解,那个传入的字符串的长度如果不是用形参来传入的话(额外增加一个参数)
那出了移动指针空跑一遍字符串,还有别的办法获取吗
程序代码:
#include <stdio.h>

void reverse_string(char* string)
{
    char* p_begin=string;
    while(*string!=NULL)
    {
        string++;
    }
    string--;
    char* p_end=string;
    char tmp;
    while(*p_begin!=*p_end)
    {
        tmp=*p_begin;
        *p_begin=*p_end;
        *p_end=tmp;
        p_begin++;
        p_end--;
    }
}


int main()
{
    char test[]="ABC";
    reverse_string(test);
    printf("%s",test);
    return 0;
} 


DO IT YOURSELF !
2012-12-03 09:50
快速回复:c和指针的一道题目:
数据加载中...
 
   



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

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