对于一个字符串,请设计一个算法,只在字符串的单词间做逆序调整,也就是说,字符串由一些由空格分隔的部分组成,你需要将这些部分逆序。
给定一个原字符串A,请返回逆序后的字符串。例,输入"I am a boy!", 输出"boy! a am I"
输入一行字符串str。(1<=strlen(str)<=10000)
返回逆序后的字符串。
It's a dog!
dog! a It's
#include<iostream> #include<string> using namespace std; int main(int argc,const char* argv[]) { string str; getline(cin,str); int num = 0; const char* ptr = nullptr; string::reverse_iterator riter = str.rbegin(); for( ; riter < str.rend() ; riter++) { if(*riter == ' ') { ptr = &(*(riter-1)); for(int i=0 ; i < num ; i++,ptr++) { cout<<*ptr; } cout<<*riter; num = -1; } if(riter == str.rend()-1) { string::iterator iter = str.begin(); for(int i=0 ; i < num+1 ; i++,iter++) { cout<<*iter; } } num++; } return 0; }我好菜啊,用一个指针记录正向输出位置,使用逆向迭代器实现翻转输出。。。还是知道题目只会有一个空格。。就不用了那么麻烦的判断了。。
import java.util.Scanner; public class Main{ public static void main(String[] args){ String str_input = new Scanner(System.in).nextLine(); String[] str_input_splits = str_input.split(" "); String str_output = ""; for(int i=(str_input_splits.length-1); i>=0; i--){ if(str_output == ""){ str_output += str_input_splits[i]; }else{ str_output = str_output + " " + str_input_splits[i]; } } System.out.println(str_output); } }
#include<stdio.h> #include <stdlib.h> //三步翻转法,第一步分出来每个单词,第二步翻转每个单词,第三步翻转整个句子 void reverseWord(char *start, char *end) { char temp; while(start < end) { temp=*start ; *start = *end; *end = temp; *start++; *end--; } } int main() { char s[10000] = " "; char *p=s; char *q=s; gets(s); 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); //将最后一个单词逆序 reverseWord(s,q-1); //将整句话逆序 printf("%s\n", s); return 0; }
#include<iostream> #include<string> #include <sstream> using namespace std; int main() { string str; getline(cin,str); int Memory = str.length()-1; for (int i= str.length();i>=0;i--) { if (str[i] == ' ') { if (Memory == str.length()-1) { cout << str.substr(i+1,Memory-i); Memory = i; } else { cout << str.substr(i,Memory-i+1);//Core! Memory = i ; } } if ( i == 0) { cout << str.substr(i,Memory-i); } } return 0; }
import java.util.Scanner; import java.util.List; import java.util.ArrayList; import java.util.Collections; public class Main { public static void main(String[] args){ String s = new Scanner(System.in).nextLine(); List<String> arr1 = new ArrayList<String>(); Collections.addAll(arr1,s.split(" ")); Collections.reverse(arr1); String re = String.join(" ",arr1); System.out.println(re); } }