首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 刚才没有把问题说清楚
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 15:49:41 楼主
    刚才我说题有些问题,再发一次
    把一个字符串单词倒序,例如"I am a student"转变后"student a am I".效率要高些
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 15:55:211楼 得分:0
    使用strtok()分割出每个单词,
    然后再一次入栈,
    最后依次出栈输出就行了!!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 16:07:042楼 得分:0
    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;

    void main()
    {
      char p[] = "i am a student";

      vector <char*> v;
      char steps[] = " ";
      char *token = strtok(p,steps);
      while(token != NULL)
      {
        v.push_back(token);
        token = strtok(NULL,steps);
      }
    for(int i = v.size()-1;i >= 0;i-- )
    cout < <v.at(i) < <" ";
    cout < <endl;


    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 16:12:533楼 得分:0
    楼上办法不错,有没有不借助库函数,自己实现的办法。这样我们更容易分析时间复杂度
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 16:19:574楼 得分:0
    C/C++ code
    #include <iostream> using namespace std; #define SWAP(x, y) (x)^=(y)^=(x)^=(y) void Reverse(char* str) { char *start=str, *end = str; while (*end) { while (*end && *end != ' ') ++end; for (char* s = start, *e = end-1; s < e; ++s, --e) SWAP(*s, *e); while (*end && *end == ' ') ++end; start = end; } for (start = str, --end; start < end; ++start, --end) SWAP(*start, *end); } int main() { char str[] = "i am a student"; Reverse(str); printf("%s\n", str); return 0; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 16:21:095楼 得分:0
    这个,搜一下,网上多阿
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 16:21:246楼 得分:0
    之前不是写过一个了吗????
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 16:27:237楼 得分:0
    C/C++ code
    /* inversewords.c * 把一个字符串单词倒序,例如"I am a student"转变后"student a am I". */ void strInverse(char str[]); int main(int argc,char *argv[]) { char c[] = "I like C"; int i; if(argc > 1) { for(i = (argc-1);i > 0;i--) { printf("%s ",argv[i]); } } else { printf("%s\n",c); } return 0; }

    这样如何??????命令行参数!~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 16:37:238楼 得分:0
    或者…………………………………………………………???
    C/C++ code
    /* inversewords.c * 把一个字符串单词倒序,例如"I am a student"转变后"student a am I". */ #include <stdio.h> #include <stdlib.h> int main(int argc,char *argv[]) { char c[] = "I like C"; char *p; int i; p = c; if(argc > 1) { for(i = (argc-1);i > 0;i--) { p = realloc(p,(strlen(argv[i]) + strlen(p))); sprintf(p,"%s ",argv[i]); printf("%s",p); } } else { printf("%s\n",c); } return 0; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 17:12:219楼 得分:0
    更正8楼代码……
    C/C++ code
    /* inversewords.c * 把一个字符串单词倒序,例如"I am a student"转变后"student a am I". */ #include <stdio.h> #include <stdlib.h> int main(int argc,char *argv[]) { char temp[100]; char *p; int i; int iLen = 0; p = malloc(sizeof(char *)); if(argc > 1) { iLen = sizeof(p) - strlen(p); memset(p,'\0',sizeof(p)); for(i = (argc - 1);i > 0;i--) { memset(temp,'\0',sizeof(temp)); iLen = iLen + strlen(argv[i]) + 1; p = realloc(p,iLen); sprintf(temp,"%s ",argv[i]); strcat(p,temp); } p[iLen - 1] = '\0'; printf("%s",p); } else { printf("Please input the data.\n"); } return 0; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 17:22:2410楼 得分:0
    "I am a student" -> "tneduts a ma I" -> "student a am I"
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 17:50:2711楼 得分:0
    错了,从后往前读就是了。
    C/C++ code
    #include <stdio.h> #include <string.h> #include <stdlib.h> void foo(char* str) { int length = strlen(str); int offset = 0; char* result= (char*)malloc(length); int wordlen = 0; for(int i=length-1;i>=0;--i) { if(str[i] != ' ') { ++wordlen; } else { memcpy(result+offset,str+i+1,wordlen); result[offset+wordlen] = ' '; offset += wordlen+1; wordlen = 0; } } memcpy(result+offset,str,wordlen); memcpy(str,result,length); } void main() { char buf[] = "I am a student"; foo(buf); printf(buf); }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-24 17:51:3212楼 得分:0
    忘释放内存

    C/C++ code
    #include <stdio.h> #include <string.h> #include <stdlib.h> void foo(char* str) { int length = strlen(str); int offset = 0; char* result= (char*)malloc(length); int wordlen = 0; for(int i=length-1;i>=0;--i) { if(str[i] != ' ') { ++wordlen; } else { memcpy(result+offset,str+i+1,wordlen); result[offset+wordlen] = ' '; offset += wordlen+1; wordlen = 0; } } memcpy(result+offset,str,wordlen); memcpy(str,result,length); free(result); } void main() { char buf[] = "I am a student"; foo(buf); printf(buf); }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-25 17:39:1913楼 得分:0
    帖子内容不能为空,请输入帖子内容
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved