| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2257 人关注过本帖, 1 人收藏
标题:关于字符串反转的问题
只看楼主 加入收藏
未名湖的云
Rank: 3Rank: 3
来 自:安徽
等 级:论坛游侠
帖 子:130
专家分:190
注 册:2012-10-11
收藏
得分:2 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void strrev1(char *str);
void main()
{
    char *str;//你之前没有给str分配合适的内存单元指向,所以输入的时候字符串没有地方放置
    str = (char*)malloc(sizeof(char)*30);//这个是动态分配内存,这个最多只能输入30个字符~~~
    printf("input str:");
    scanf("%s",str);//这里str就是首地址,不需要加&取址符
    //最简单的事把上面都替换成以下
    //char str[5]="hello";
    strrev1(str);//字符串反转函数
    printf("%s\n",str);//输出的时候也是一样的,给它首地址,它会自动往下输出下一个字符,直到遇见‘\0’
}

void strrev1(char *str)//调用函数的时候,传的是首地址,函数体内加*后就是直接操作字符串了,不需要使用返回地址了,而且你返回的不是首地址
{
    char ch;
    char *end;
    int len;
    len=strlen(str);
    end=str+len-1;//end获取最后一个地址,因为是从0开始的
    while (str<end)
    {
        ch=*str;//ch中间变量
        *str++=*end;
        *end--=ch;
    }
}
不知道这是不是楼主需要的哦(测试木有问题~~~)
2012-11-07 20:01
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
收藏
得分:0 
回复 9楼 yudeyinji198
是的,非常感谢!
2012-11-07 21:27
未名湖的云
Rank: 3Rank: 3
来 自:安徽
等 级:论坛游侠
帖 子:130
专家分:190
注 册:2012-10-11
收藏
得分:0 
回复 楼主 yudeyinji198
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void strrev1(char *str);
void main()
{
    char *str;//你之前没有给str分配合适的内存单元指向,所以输入的时候字符串没有地方放置
    str = (char*)malloc(sizeof(char)*30);//这个是动态分配内存,这个最多只能输入30个字符~~~
    printf("input str:");
    scanf("%s",str);//这里str就是首地址,不需要加&取址符
    //最简单的事把上面都替换成以下
    //char str[5]="hello";
    strrev1(str);//字符串反转函数
    printf("%s\n",str);//输出的时候也是一样的,给它首地址,它会自动往下输出下一个字符,直到遇见‘\0’
}

void strrev1(char *str)//调用函数的时候,传的是首地址,函数体内加*后就是直接操作字符串了,不需要使用返回地址了,而且你返回的不是首地址
{
    char ch;
    char *end;
    int len;
    len=strlen(str);
    end=str+len-1;//end获取最后一个地址,因为是从0开始的
    while (str<end)
    {
        ch=*str;//ch中间变量
        *str++=*end;
        *end--=ch;
    }
}
不知道这是不是楼主需要的哦(测试木有问题~~~)
2012-11-07 21:30
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
收藏
得分:0 
回复 12楼 yudeyinji198
void strrev1(char *str)//调用函数的时候,传的是首地址,函数体内加*后就是直接操作字符串了,不需要使用返回地址了,而且你返回的不是首地址
请问这里返回的为什么不是元素,而是地址呢?是因为我传的是首地址吗?

[ 本帖最后由 yudeyinji198 于 2012-11-7 21:50 编辑 ]
2012-11-07 21:49
cjbs10086
Rank: 2
等 级:论坛游民
帖 子:32
专家分:45
注 册:2012-10-13
收藏
得分:0 
#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<string.h>
//char *strreverse(char *str);
//int strlen(const char *str);
int main()
{
    char str[1001];
    scanf("%s",str);
    int  len=strlen(str);
    char *dest=(char *)malloc(len+1);
    char *d=dest;
    char *s=&str[len-1];
    while(len--)
        *d++=*s--;
    *d='\0';
    puts(dest);
    free(dest);
    return 0;
}



或者。。。。。。
#include<stdio.h>
#include<assert.h>
char *strreverse(char *str);
int main()
{
char s[1001];
while(gets(s))
{
strreverse(s);
puts(s);
}
return 0;
}
char *strreverse(char *str)
{
assert(str!=NULL);
char ch;
char *start=str;
char *left=str;
while(*str++);
str-=2;
while(left<str)
{
ch=*left;
*left++=*str;
*str--=ch;
}
return  start;
}


或者。。。。
include<stdio.h>
#include<assert.h>
int strlen(const char *str);
int main()
{
    char str[1001];
    char c;
    while(gets(str))
    {
        int n=strlen(str);
        for(int i=0;i<n/2;i++)
        {
            c=str[i];
            str[i]=str[n-i-1];
            str[n-i-1]=c;
        }
        puts(str);
    }
    return 0;
}

或者。。
#include<stdio.h>
#include<stack>
using namespace std;
int main()
{
stack<char>s;
char c;
while(1)
{
while((c=getchar())!='\n')
s.push(c);
while(!s.empty())
{
printf("%c",s.top());
s.pop();
}
printf("\n");
}
return 0;
}
收到的鲜花
2012-11-07 22:24
yudeyinji198
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:139
专家分:133
注 册:2012-8-30
收藏
得分:0 
回复 15楼 cjbs10086
很感谢,有那么多种方法,可惜分给了,谢谢啦!!!!!
2012-11-07 22:39
快速回复:关于字符串反转的问题
数据加载中...
 
   



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

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