句子单词位置反转c语言,句子反转

46

import sys

print(" ".join(sys.stdin.readline().strip().split(" ")[::-1]))

编辑于 2018-09-05 10:28:58

回复(8)

23

#include

#include

#include

using namespace std;

int main(){

string s;

stack sstack;

while(cin>>s){

sstack.push(s);

}

while(sstack.size()!=1){

cout<

sstack.pop();

}

cout<

return 0;

}

发表于 2017-08-10 23:12:38

回复(13)

10

import java.util.Scanner;

public class StringUtil {

//句子反转

public static void main(String[] args) {

Scanner in = new Scanner(System.in);

while(in.hasNext()){

String str = in.nextLine();

String arr[] = str.split(" ");

StringBuffer res = new StringBuffer();

for(int i=arr.length-1; i>0; i--){

res.append(arr[i]+" ");

}

res.append(arr[0]);

System.out.println(res.toString());

}

}

}

发表于 2017-09-04 16:04:36

回复(6)

14

#include

#include

#include

using namespace std;

int main() {

string words;

while (getline(cin, words)) {

reverse(words.begin(), words.end());

unsigned i = 0, j = i;

while (i < words.size()) {

while (i < words.size() && words[i] != ' ')

++i;

reverse(words.begin() + j, words.begin() + i);

j = ++i;

}

cout << words << endl;

}

return 0;

}

编辑于 2017-12-23 10:04:48

回复(1)

4

#include

#include

#include

using namespace std;

int main()

{ string s; stack st; while(cin>>s)  st.push(s); while(st.size()!=1) { cout<

}

发表于 2018-01-10 00:27:58

回复(0)

4

其实这道题应该再加一个空间复杂度为O(1)的要求 /**

*1.先将整个字符串转成字符数组反转得到 mi xiao hello

*2.遍历这个字符数组,遇到空格或者到了尾部再做局部反转

*/

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

String s = scanner.nextLine();

char[] arr = s.toCharArray();

for (int i=0; i

char temp = arr[i];

arr[i] = arr[arr.length-1-i];

arr[arr.length-1-i] = temp;

}

//System.out.println(new String(arr));

int start = 0, end = 0;

for (int i=0; i

if (arr[i]==' ' || i+1==arr.length) {

if (arr[i]==' ')

end = i-1;

else if (i+1==arr.length)

end = i;

for (int j=start; j

char temp = arr[j];

arr[j] = arr[start+end-j];

arr[start+end-j] = temp;

}

start = i + 1;

}

}

System.out.println(new String(arr));

}

发表于 2017-09-11 16:20:10

回复(2)

4

//首先将输入字符串整体逆序,然后再分别逆序每个单词,单词以空格为边界。

//需要注意的是最后一个单词也要逆序,可以最后单独处理。

#include

#include

using namespace std;

void Reverse(string &str, int start, int end) //字符串整体逆序

{

while (start < end)

{

swap(str[start], str[end]);

start++;

end--;

}

}

int main()

{

string str;

while (getline(cin,str))

{

int len = str.length();

if (len <= 1)

{

cout << str << endl;

continue;

}

Reverse(str,0,len-1); //字符串整体逆序,比如输入"hello xiao mi",逆序后变为"im oaix olleh"

int index = 0; //记录每个单词第一个字母的位置index,初始为0

for (int i = 0; i < len; i++)

{

if (str[i] == ' ') //找到第一个空格

{

Reverse(str, index, i - 1); //将str中index到i-1位置之间的单词逆序,此时im变为mi

index = i + 1; //记录下一个待逆序单词的起始位置

}

}

Reverse(str, index, len-1); //处理最后一个单词

cout << str << endl;

}

}

发表于 2017-09-06 16:38:58

回复(1)

2

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

while(scanner.hasNext()){

String str = scanner.nextLine();

String[] strs = str.split(" ");

for (int i = strs.length-1; i >= 0; i--) {

System.out.print(strs[i]);

if(i != 0){

System.out.print(" ");

}

}

}

}

}

编辑于 2018-10-22 19:51:21

回复(2)

2

C语言思路:

第1步:先将整个字符串逆置。

第2步:再将单词逆置

整个代码多次用到逆置,故设计成函数

代码如下:

#include

#include

int main()

{

char a[1001];

int i,j;

gets(a);

int l=strlen(a);

void reverse(char *str,size_t len);

void print(char *str,size_t len);

reverse(a,l);              //整个字符串逆置

for(i=0,j=i;j

{

if(a[j]==' ')

{

reverse(a+i,j-i);

print(a+i,j-i);

printf(" ");

i=j+1;

}

if(a[j]=='\0')

{

reverse(a+i,j-i);

print(a+i,j-i);

break;

}

}

return 0;

}

/****************逆置函数********************/

void reverse(char *str,size_t len)

{

if(str==NULL||*str=='\0'||len==0||len==1)

return;

char *p1,*p2,t;

p1=str;

p2=str+len-1;

while(p1

{

t=*p1;

*p1=*p2;

*p2=t;

p1++;

p2--;

}

}

/*******************输出函数******************/

void print(char *str,size_t len)

{

int i;

for(i=0;i<=len-1;i++)

{

printf("%c",*str);

str++;

}

}

发表于 2018-02-24 14:32:52

回复(1)

2

#include

#include

#include

using namespace std;

int main()

{

string str1, temp;

vector v1;

getline(cin, str1);

for (int i = 0;i < str1.size();++i)

{

if (str1[i] != ' ')

temp += str1[i];

else

{

if (!temp.empty())

{

v1.push_back(temp);

temp.clear();

}

}

}

if (!temp.empty())

v1.push_back(temp);

int i;

for (i = v1.size() - 1;i > 0;--i)

cout << v1[i] << ' ';

cout << v1[i] << endl;

return 0;

}

发表于 2017-09-26 21:03:09

回复(0)

2

//本例题,用python 和用java都有分隔函数,不过不知道c++有没有。所以用C++代码比较复杂一点

时间复杂度是O(n2),从后面像前面递归,遇见空格先后面输出再遇见空格或到最后一个字母停止(没有这个的话会一直输出到你定义的数组长度末)

最后如果遇见的是第一个字符同上,向后输出,遇见空格或最后一个字母停止

最后希望我们共同坚持,特别是我

#include

#include

#include

#define N 1001

using namespace std;

int main()

{

char a[N];

while(gets(a)){

//cout<

for(int i = strlen(a)-1;i>=0;i--)

{

if(a[i]==' ')

{

for(int j = i+1;j

{

if(a[j]==' ')break;

else cout<

}

cout<

}

else if(i==0){

for(int j = i;;j++)

{

if(a[j]==' ')break;

else cout<

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值