题解 | #倒置字符串#
倒置字符串
http://www.nowcoder.com/practice/ee5de2e7c45a46a090c1ced2fdc62355
【大博哥来解题:】
本题思路:
1、先整体逆置
2、从头开始每个单词逆置,需要注意,最后一个单词结尾不是空格。C/C++就是\0.Java通过长度来判断。
3、C/C++注意,不要逆置了\0 . Java 注意通过长度判断句子结束
4、以下代码分别是:C 、C++、Java实现
代码实现:
C 代码:
#include<stdio.h> #include<string.h> void Reverse(char *start,char *end) { while(start < end) { char tmp = *start; *start = *end; *end = tmp; start++; end--; } } int main() { char input[100]; gets(input); //1.整体逆置 Reverse(input,input+strlen(input)-1); char *start = input; char *end = input; while(*start != '\0') { while(*end != ' ' && *end != '\0') { end++; } if(*end == ' ') { Reverse(start, end-1); end++; start = end; } else { Reverse(start, end-1); start = end; } } printf("%s\n",input); return 0; }
C++代码:
#include <iostream> #include <string> #include <algorithm> using namespace std; int main() { string s; getline(cin,s); //1、进行整体的逆置 -》gnijieb ekil I reverse(s.begin(),s.end()); auto start = s.begin(); while(start != s.end()) { auto end = start; while(end != s.end() && *end != ' ') { end++; } reverse(start,end); if(end != s.end()) { start = end+1; }else{ start = end; } } cout<<s<<endl; }
Java代码:
import java.util.*; public class Main{ public static void reverse(char[] array,int start,int end) { while(start < end) { char tmp = array[start]; array[start] = array[end]; array[end] = tmp; start++; end--; } } public static void main(String[] args) { Scanner scan = new Scanner(System.in); String s = scan.nextLine(); char[] ch = s.toCharArray(); int len = ch.length; //1、整体进行了逆置 reverse(ch,0,len-1); int i = 0;//遍历ch数组 while( i < len ) { int j = i; while(j < len && ch[j] != ' ') { j++; } if(j < len) { reverse(ch,i,j-1); i = j+1; }else{ reverse(ch,i,j-1); i = j; } } String str = new String(ch); System.out.println(str); } }