#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--;
}
}
}