蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 |
 您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程


    

蓝森林 http://www.lslnet.com 2006年6月6日 10:18


<<C和指針>>一道題

编写函数reverse_string
Void reverse_string(char *string);
把参数字符串的字符反向排列,请用指针不用数组下标,不要使用C库中用于操纵字符串的函数。提示:不需要声明一个局部数组来临时存储参数字符串。
大家看看

void reverse_string(char *str )
{      
        char *p, *q;
        if( string == NULL )
                return ;
        p = string ;
        q = string +strlen( string ) - 1;
        for( int i = 0; i < strlen( string ) / 2 + 1;i++ )
        {
                char t;
                t = *p;
                *p = *q;
                *q = t;
                p++;q--;
        }
}



不知道这个符合你的要求吗?

不能用庫函數,包括strlen

闲来无事,练练手。写了一个,望各位指正
[code]
void reverse_string(char *string)
{
    int         len = 0;
    int         i = 0;
    char        temp;

    if ( string == NULL)
       return;

    while (*(string+len) )
       len++;

    for (i = 0; i < len/2; i++)
    {
        temp = *(string+ i);
        *(string + i) = *(string + len - 1 - i);
        *(string + len - 1 - i) = temp;
   }

   return ;
}

[/code]


請大家看清題目。
不能用庫函數,包括strlen !!!!
void reverse_str(char *str)
{
char *p=str;
while(*p!='\0')
{
     p++;
}

while(str<p)
{
char q;
q=*str;
*str++=*p;
*p--=q;
}
}

Void reverse_string(char *string)
{
        char *start = string;
        char *end = string;
        char temp;
        while(*end++) ;
        end--;
        for( ;start<end;start++,end--){
                temp = *start;
                *start = *end;
                *end = temp;
        }
}

疑似精华里面有一个同样的

黑苦咖啡

正解!!謝謝!!!!

黑苦咖啡
太棒了

学习学习……

学习中,为何不写main函数啊,

-->

写的不错,改正一个错误,加上简化一下

[code]void reverse(char *s)
{
        char *e = s;

        while (*e) e++;

        for (e--; s<e; s++,e--) {
                *s ^= *e;
                *e ^= *s;
                *s ^= *e;
        }      
}[/code]

-->


好好的一个思路哦!!!学习一下!!!呵呵,不过,确实有一个小问题, 就是在[color=Red]end--;之后[/color] 还应该[color=Red]再end--;[/color]一次。
因为end在循环到字串结束的时候已经指到'\0'的下一个地址上了,这样的话回退指针end--指的位置也是'\0'的位置,直接赋值给temp,temp再给end的时候,*end就是'\0'.字串第一个字符是'\0'还怎么能够输出后面的东西呢?
所以我觉得回退的时候应该回退两次。

另外楼上的看到问题可能和我想的是一样的,但在在代码里却也少写了一次end--,不过我即使加上了end--,你的结果也不全,只有其中的一部分,但由于我没有用过^=,所以不敢妄加评论。:em34:


-->

while (*end++);

while (*end) end++;
可不一样哦

哦???指点一下呗?另外,^=这样的写法是异或么???为什么你的结果会不对呢?

回复 14楼 seeLnd 的帖子

while (*end++);

while (*end) end++;
可不一样哦


能解释一下为什么吗?真的想不通!

回去想了一下,想通了,就是先取值的问题。

还有为什么会有段错误,
...
   *start = *end;
...
不明白?!



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com