| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1587 人关注过本帖
标题:一个面试题: reverse words in place with O(n) time
取消只看楼主 加入收藏
jianweichief
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2007-7-18
收藏
 问题点数:0 回复次数:3 
一个面试题: reverse words in place with O(n) time
将输入的字符串中的单词从后到前重排
如:输入"Somewhere i belong."
输出"Belong.i Somewhere"
请高手展示代码

[此贴子已经被HJin于2007-7-26 0:03:15编辑过]

搜索更多相关主题的帖子: reverse place words time Somewhere 
2007-07-22 17:28
jianweichief
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2007-7-18
收藏
得分:0 

规则就是这样,所以才提的问啊.


2007-07-25 21:19
jianweichief
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2007-7-18
收藏
得分:0 
以下是引用HJin在2007-7-26 0:05:54的发言:

/*---------------------------------------------------------------------------
File name: ReverseWords.c
Author: HJin (email: fish_sea_bird [at] yahoo [dot] com )
Created on: 7/25/2007 09:05:10
Environment: Windows XP Professional SP2 English +
Visual Studio 2005 v8.0.50727.762


Modification history:
===========================================================================

1. I wrote this function a few years ago. Fully test it before delivering it
to your client.
2. I removed comments to force you study the code instead of copy it.
3. Good luck!
*/

#include <stdio.h>
#include <string.h>

void strsrev(char* p, char* r)
{
char t;
while(p<r)
{
t = *p;
*p++ = *r;
*r-- = t;
}
}

/**
Reverse words in place.

O(n) algorithm.
*/
void wordrev(char* s)
{
char*b =s, *e = s+strlen(s)-1;

if(!s)
return;

strsrev(b, e);
b=e=s;

while(*b)
{
while(*b && *b == ' ')
++b;

e = b;
while(*e && *e != ' ')
++e;

strsrev(b, e-1);

b=e;
}
}


int main()
{
char s[100] = "Somewhere i belong.";

wordrev(s);
*s &= 0xDF;

printf("%s\n", s);

return 0;
}


红字部分看的不是很懂啊,当第一次循环结束后,b和e应该都指向.belong中的l的位置吧。然后执行while(*b && *b == ' ') ++b;语句,b能指向i吗?
还有e刚执行完第一次循环后,不是也指向l吗,如何在第二次调用strsrev(b, e-1);时,指向i呢?


2007-08-01 22:18
jianweichief
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2007-7-18
收藏
得分:0 
能回答一下我的问题吗

2007-08-02 16:54
快速回复:一个面试题: reverse words in place with O(n) time
数据加载中...
 
   



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

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