题解 | #倒置字符串#

倒置字符串

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);
    }
}
全部评论

相关推荐

程序员鼠鼠_春招版:我要12k吧我挂了,还招呢,天天被割,这点钱都不舍得出
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务