输入句子 按单词倒过来输出

tnylovecsharp 2009-02-13 01:30:42
输入一句子,写个函数将输入的字符串倒过来输出
比如说输入一个句子:I am poly ,写个函数倒过来输出:poly am I
...全文
995 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
sendto66 2009-02-20
  • 打赏
  • 举报
回复
不懂,up
netsocket 2009-02-20
  • 打赏
  • 举报
回复
不懂,up
itegel84 2009-02-20
  • 打赏
  • 举报
回复
呵呵,有才
[Quote=引用 28 楼 uloborid 的回复:]
引用 10 楼 LCL_data 的回复:
题目的 意思是让用stack吧


用stack不行吧?如果用stack,“I am poly”的输出就应该是“ylop ma I”
[/Quote]
绿色夹克衫 2009-02-20
  • 打赏
  • 举报
回复
又看见这道题了,O(1)空间应该可以!

可以先整个翻过来(对调头尾的字符),再翻转单词(对调单词头尾的字符)

I am poly =>
ylop ma I =>
poly am I

也可以先翻转单词,再整个调过来

I am poly =>
I ma ylop =>
poly am I
蜥蜴枪王 2009-02-20
  • 打赏
  • 举报
回复
用栈吧 它的特性是:先进后出,后进先出..
passionboy03 2009-02-19
  • 打赏
  • 举报
回复
设置两个变量,一个统计字符位置,一个统计单词位置……
[Quote=引用楼主 tnylovecsharp 的帖子:]
输入一句子,写个函数将输入的字符串倒过来输出
比如说输入一个句子:I am poly ,写个函数倒过来输出:poly am I
[/Quote]
liuwg9999 2009-02-19
  • 打赏
  • 举报
回复
用C++写这个代码好像没什么意思
我看你有戏 2009-02-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mugua_tian 的回复:]
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
char s[]="I am poly";
char *p;

for(p=s+strlen(s);p>=s;p--)
{
if(*p==' ')
{
printf("%s ",(++p));
*(--p)='\0';
}
}
co…
[/Quote]


此人的回复很精辟
kiffa 2009-02-19
  • 打赏
  • 举报
回复
呃,写错了,完全倒序了。。。
kiffa 2009-02-19
  • 打赏
  • 举报
回复
int main(int i)
{
(i = getchar()) != '\n' && (main(i), putchar(i));
}
runtospring 2009-02-19
  • 打赏
  • 举报
回复
可以用栈啊!LZ可以去学习一下数据结构中的栈
runtospring 2009-02-19
  • 打赏
  • 举报
回复
可以用栈啊!LZ可以去学习一下数据结构中的栈
ysysbaobei 2009-02-19
  • 打赏
  • 举报
回复
顶下
gjy1606 2009-02-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 taodm 的回复:]
vector <string> r((istream_iterator <string>(cin)), istream_iterator <string>());
copy(r.rbegin(), r.end(), ostream_iterator <string>(cout, " "));
[/Quote]

UP,支持用容器,这种方法应当是最简单的了
捕鲸叉 2009-02-18
  • 打赏
  • 举报
回复
看看strtok这个函数就知道怎么做了
laocpp 2009-02-17
  • 打赏
  • 举报
回复
这是个常用面试题, 本意是不开新的buffer, 把某个buffer里的字串按词颠倒.

解题思路是: 先对整个buffer作一次string reverse, 然后再做一次逐词string reverse.

这个算法也可推广到 按句颠倒, 按行颠倒, 按段颠倒 ...

#include <string>
#include <algorithm>
#include <iostream>
#include "assert.h"

using namespace std;

void StringReverse(char * pStart, size_t nLen)
{
if (pStart == NULL || pStart[0] == '\0' || nLen < 2)
return;

assert (nLen <= strlen(pStart));
size_t nHalf = nLen/2;
for (size_t i = 0; i < nHalf; i++)
swap(pStart[i], pStart[nLen-i-1]);
}

int main()
{
char szString[] = "I am poly";

StringReverse(szString, strlen(szString));

char *pCurWordStart = szString;
size_t nCharCount = 0;

while (1)
{
char c = pCurWordStart[++nCharCount];
if ( c == '\0' || c == ' ' || c == '\n')
{
StringReverse(pCurWordStart, nCharCount);

if ( c == '\0')
break;
else
{
pCurWordStart += nCharCount+1;
nCharCount = 0;
}
}
}

cout << szString << endl;

while ( !getchar() );
}
jimofengxiao 2009-02-16
  • 打赏
  • 举报
回复
我很喜欢4楼飞雪的程序,简洁明了
xuruichen 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 baihacker 的回复:]
C/C++ code#include <iostream>
#include <vector>
#include <string>
#include <sstream>
using namespace std;

int main(void)
{
vector<string> result;
string str, temp;
stringstream ss;
getline(cin, str);

ss << str << endl;
while (ss>>temp) result.push_back(temp);
for (int i = result.size(); i; cout << result[--i] << ' ');

还是喜欢飞雪的代码风格,纯C++风格。

return 0;
}
[/Quote]
uloborid 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 LCL_data 的回复:]
题目的 意思是让用stack吧
[/Quote]

用stack不行吧?如果用stack,“I am poly”的输出就应该是“ylop ma I”
fixliy0418 2009-02-16
  • 打赏
  • 举报
回复
牛,佩服!!
加载更多回复(26)

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧