#include <bits/stdc++.h> using namespace std; int main(){ string s; getline(cin, s); int i=0, l=0, r, n=s.length(); while(i<n){ if(s[i]==' '){ for(r=i-1;l<r;l++,r--) swap(s[l], s[r]); l = i+1; } i++; } for(r=i-1;l<r;l++,r--) swap(s[l], s[r]); cout<<s<<endl; return 0; }
print(' '.join([word[::-1] for word in input().split()]))然后正儿八经的按照题意利用双指针来求解,定义一个左指针始终指向单词的起始位置,遍历字符串中的字符,如果遇到空格,表示此时已经遍历完了一个单词,定义一个右指针指向空格前的一个字符,为单词尾,然后反转左右指针所指的这段子字符串。完成翻转后再将左指针指到空格右边,为下一个单词的起始位置,如法炮制寻找右指针。注意最后一个单词没有空格来识别,需要特殊处理一下。
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); char[] str = br.readLine().toCharArray(); int ptr = 0, left = 0, right = 0; while(ptr < str.length){ if(str[ptr] == ' '){ right = ptr - 1; reverse(str, left, right); left = ptr + 1; } ptr ++; } // 最后一个单词要特殊操作 right = ptr - 1; reverse(str, left, right); System.out.println(str); } private static void reverse(char[] str, int left, int right) { while(left < right){ char temp = str[left]; str[left] = str[right]; str[right] = temp; left ++; right --; } } }
#include <iostream> #include <string> using namespace std; int main(){ string str; while(cin >> str){ int l = str.size(); int start=0, end=0; //利用双指针,当遇到空格时,输出str[end->start]; for(int i=0; i<l; i++){ end = i; if(str[i] == ' ' || i == l-1){ //遇到空格 或者 到最后一个字符 for(int j=end; j>=start; j--){ cout << str[j]; } cout << ' '; start = i+1; end = i+1; //打印完后,start和end 指向空格下一字符; } } } return 0; }
import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); char[] arrs = scanner.nextLine().toCharArray(); int length = arrs.length; int start = 0; while(start<length){ int end = start; while(end<length && arrs[end] != ' '){end++;} for(int j=start;j<(start + end)/2;j++){ char temp = arrs[j]; arrs[j] = arrs[end+start-1-j]; arrs[end+start-1-j] = temp; } start = end+1; } for(int i=0;i<length;i++){ System.out.print(arrs[i]); } } }
#include <stdio.h> #include <string.h> #define MAXLEN 100005 void reverse(char *str, int start, int end); int main(void) { char str[MAXLEN]; int len; fgets(str, MAXLEN, stdin); len = strlen(str); str[--len] = '\0'; for (int i = 0; i < len; i++) { int j; for (j = i; j < len && str[j] != ' '; j++) ; reverse(str, i, j - 1); i = j; } puts(str); return 0; } void reverse(char *str, int start, int end) { char t; while (start < end) { t = str[start]; str[start] = str[end]; str[end] = t; start++; end--; } }
#include<bits/stdc++.h> using namespace std; int main(){ string s1; getline(cin,s1); int x=0,y=-1; string s2; bool flag=false; int n=s1.size(); for(int i=0;i<n;i++){ if(s1[i] == ' '){ x=y+1; y=i; s2=s1.substr(x,y-x); reverse(s2.begin(),s2.end()); cout<<s2<<" "; flag= true; } } if(!flag){ reverse(s1.begin(),s1.end()); cout<<s1; }else{ while(s1[n-1]!=' '&&n>0){ cout<<s1[n-1]; n--; } } return 0; }
#include<iostream> #include<string> using namespace std; //翻转单词 void reverse(string str, int count){ for(int i=0, j=count-1;i<j;i++,j--){ char tmp=str[i]; str[i]=str[j]; str[j]=tmp; } cout<<str<<' '; } int main(){ string tmp, str; getline(cin, str); //增加尾部空格 if(str[str.size()]!=' '){ str+=' '; } //统计单个单词大小 int count; for(int i=0;i<str.size();i++){ if(str[i]!=' '){ tmp+=str[i]; count++; } else{ reverse(tmp, count); tmp=""; count=0; } } return 0; }
#include<iostream> #include<string> #include<algorithm> using namespace std; int main() { string s; while (getline(cin,s)) { string temp; int len = s.size(); int i = 0; for(int i=0;i<=len+1;++i) { while (s[i] != ' ')//while语句作用是构造每一个单词字符串临时变量 { temp += s[i]; i += 1; if (i == len ) { break; } } reverse(temp.begin(), temp.end());//将一个单词字符串反转 cout << temp;//立即打印输出 if (i == len) break; if (s[i] == ' ') { cout << ' '; } temp.clear();//记得清空,再次开始处理第二个单词 } } }
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); String[] strings = s.split(" "); for (int i = 0; i < strings.length; i++) { if (strings[i].length() > 1){ StringBuilder sb = new StringBuilder(strings[i]); sb.reverse(); strings[i] = String.valueOf(sb); } System.out.print(strings[i]+" "); } } }
#include <iostream> (720)#include <string>using namespace std;int main() { string s, t; getline(cin, s); int start = 0; int end = 0; //cout << s.size(); for (int i = 0; i <= s.size(); i++){ if ((s[i] == ' ') || (i == s.size())){ end = i - 1;for (int j = end; j >= start; j--){ t += s[j]; } t += " "; start = end + 2; } else{ continue; } } cout << t << endl; return 0; }
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner scanner = new Scanner(System.in); while(scanner.hasNext()){ String input = scanner.nextLine(); String[] array = input.split(" "); String result = ""; for(int i=0;i<array.length;i++){ result += new StringBuffer(array[i]).reverse(); //if(i!=array.length-1){ result += " "; //} } System.out.println(result); } } }
#include<cstdio> (802)#include<cstring> #include<algorithm> using namespace std; void reverse(char str[],int l,int r){ int k=0; for(int i=l;i<=(l+r)/2;++i){ swap(str[i],str[r-k]); ++k; } } int main(){ char str[100010]; while(gets(str)!=NULL){ int len=strlen(str); for(int i=0;i<len;++i){ if(str[i]!=' '){ int j=i; while(str[i+1]!=' '&&str[i+1]!='\0'){ ++i; } reverse(str,j,i); } } puts(str); } }
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String s = reader.readLine(); char[] chas = s.toCharArray(); System.out.println(retota(chas)); } public static String retota(char[] chas) { if (chas == null || chas.length == 0) { return ""; } int before = 0; for (int i = 0; i < chas.length; i++) { if (chas[i] == ' ') { reserve(chas, before, i - 1); before = i + 1; } else if (i == chas.length - 1) { reserve(chas, before, i); } } return new String(chas); } public static void reserve(char[] chas, int start, int end) { while (start < end) { char temp = chas[start]; chas[start] = chas[end]; chas[end] = temp; start++; end--; } } }