主题:求解单词反转
miraclew
[专家分:0] 发布于 2012-02-24 12:26:00
请大家注意看题,不是字符反转,也不是纯粹的单词反转。这两个问题,在网上一搜就一把答案。
我要的效果是输入为 "Hello world", result: "olleH dlrow"。
即单词位置不变,但,单词内部的字符反转了。
我当前的想法,是用3个变量来一前一后地逐个单词进行遍历处理,然后进行逐个单词的反转,但,我觉得这样实现,比较不理想。
所以,我发贴问问大家,有没有更好的解法。
回复列表 (共5个回复)
沙发
e32570061 [专家分:0] 发布于 2012-03-05 20:50:00
可否先用一个结构存储“hello world”,然后用一个指针指向这个结构,对此进行遍历,并对得到的数据进行入栈,取到空格时,跳去执行出栈,然后判断栈空则返回继续遍历,依此进行操作。
楼主觉得呢?
板凳
fragileeye [专家分:1990] 发布于 2012-04-08 01:55:00
ls方法可行。
typedef struct _SOURCE_STR
{
size_t nlen;
char *str;
struct _SOURCE_STR *next_str;
}SOURCE_STR, *PSOURCE_STR;
链表存储,遇到空格增加节点,遍历链表,每个节点做一次操作。
3 楼
NorthWindTR [专家分:0] 发布于 2012-04-21 22:39:00
只要用stringstream字符串流读取字符,每次输出一个单词到string,再将string翻转,最后来个sum就可以了,很简单
4 楼
BruceZong [专家分:0] 发布于 2012-04-27 15:31:00
赞成1楼的想法。 这个例子可以作为栈结构“后进先出”这一特性的典型讲解。
5 楼
bluepig111111 [专家分:0] 发布于 2012-09-11 23:15:00
2楼说的对,这个题很明显要用栈,不知道哪位大神能不增加很多空间,而且能利用很小的时间复杂度就出来就好了。
#include <cstdlib>
#include <iostream>
using namespace std;
#define maxsize 256
typedef struct
{
char data[maxsize];
int top;
}SeqStack;
void WordReverse(char* src,int len)
{
SeqStack * s;
s=(SeqStack*)malloc(sizeof(SeqStack));
s->top=-1;
int min=0;
for(int i=0;i<len;)
{
if(s->top==maxsize-1)
{
printf("over flow");
return;
}
s->top++;
s->data[s->top]=src[i];
i++;
if(src[i]==' '||src[i]=='\0')
{
for(int j=min;j<i;j++)
{
if(s->top==-1)
{
break;
}
src[j]=s->data[s->top] ;
s->top--;
}
i++;
min=i;
continue;
}
}
}
int main()
{
char input[]="hello world xiaoming";
int n=strlen(input);
WordReverse(input,n);
printf("%s\n",input);
system("PAUSE");
return EXIT_SUCCESS;
}
谁能帮忙提高下。
我来回复