句子逆序
输入:I am a good boy!
1、仅仅句反
输出:boy! good a am I
int main(){
string str;
stack<string> s;
while(cin>>str)
{
s.push(str);
}
while(s.size()!=1)
{
cout<<s.top()<<" ";
s.pop();
}
cout<<s.top()<<endl;
return 0;
}
2、句反词也反
输出:!yob doog a ma I
#include<iostream>
using namespace std;
int main()
{
string str;
getline(cin,str); //用while(cin>>str)只通过50%
for(int i=str.size(); i>=0; i--) //reverse(str.begin(), str.end()); 也可以
cout<<str[i];
}
3、仅仅词反
输出:I ma a doog !yob
#include<stdio.h>
#include<iostream>
#include<string.h>
#include <stdlib.h>
using namespace std;
void reverseWord(char *start, char *end)
{
char temp;
while(start < end)
{
temp=*start ;
*start = *end;
*end = temp;
*start++;
*end--;
}
}
int main( )
{
char str[80];
gets(str);
char *p=str;
char *q=str;
while(*q != '\0')
{
if(' ' == *q) //单词结尾:q首次遇到空格(此时将单词头地址p,和单词尾地址q-1)
{
reverseWord(p,q-1);
while(' ' == *q ) //单词开头:q 跳若干空格后下一单词首字符
{
q++;
}
p=q; //单词头地址赋值给p
}
else
{
q++; //单词内部地址自加
}
}
reverseWord(p,q-1); //将最后一个单词逆序
cout<<str;
return 0;
}
第一,给定单词的首地址和尾地址,将其倒序(也就是交换功能)
第二,将一个句子拆分为每个单词:
单词尾地址根据指针q遇到(连续空格的)第一个空格判定:q-1
单词首地址根据指针q遇到的不再是空格判定
浙公网安备 33010602011771号