注册 登录
编程论坛 C++教室

大家帮忙看看问题出在哪,谢谢

sovar 发布于 2008-11-18 22:43, 528 次点击
#include<iostream.h>
//#include<string.h>

char *merry(char *str)    //字符倒置函数
{
    char *add;
    char *end;
    if(str==NULL)         //如字符串为空返回
        return 0;

    add=str;

    while(*str!='\0')
        str++;
    
    end=str;

    while(add!=end)      //交换字符串内容
    {
        char temp;
        temp=*add;
        *add=*end;
        *end=temp;

        add++;
        end--;
    }

  while(*str!='\0')
    return add;

}


void main()
{
    char s[6]="hello";

    char *a;

    a=merry(s);
      cout<<a<<endl;
}
5 回复
#2
aipb20072008-11-18 22:59
end=str;  -> end=str-1;           你那是指向了'\n';
 while(*str!='\0')
    return add;
这里是什么意思?应该在进入函数时保存str的值,只有这时是指向起始位置的。返回这个值。

还有你的程序有个隐含的错误,就是处理的字符串只能是基数,偶数的话会内存错误。
原因是偶数时,这个判断不会为真add!=end
#3
sovar2008-11-18 23:21
谢谢楼上的了
#4
sovar2008-11-18 23:26
还有你的程序有个隐含的错误,就是处理的字符串只能是基数,偶数的话会内存错误。
原因是偶数时,这个判断不会为真add!=end


这个问题怎么解决? 我想想了要
#5
sovar2008-11-18 23:41
#include<iostream.h>
//#include<string.h>

char *merry(char *str)    //字符倒置函数
{
    char *add;
    char *add1;
    char *end;
    int n=0;
    
    if(str==NULL)         //如字符串为空返回
        return 0;
    add=str;
    add1=str;

    while(*str!='\0')
    {
        str++;
        n++;
    }
    
    end=str-1;

    for(int i=0;i<n/2;i++)     //交换字符串内容
    {
        char temp;
        temp=*add;
        *add=*end;
        *end=temp;

        add++;
        end--;
    }

 
    return add1;

}


void main()
{
    char s[7]="hello0";

    char *a;

    a=merry(s);
      cout<<a<<endl;
}

改好了,谢谢   aipb2007  了
#6
aipb20072008-11-19 00:36
不用谢,程序写法还可以更简洁,另外注意命名
1