• 2015年北京大学软件project学科优秀大学生夏令营上机考试---C:单词翻转面试题


    题目描写叙述:翻转句子中单词的顺序。但单词内字符的顺序不变。句子中单词以空格符隔开。
    为简单起见,标点符号和普通字母一样处理。如:"I am a student."翻转成"student. a am I"。


    #include <iostream>
    #include<assert.h>
    #include<cstring>
    using namespace std;
    
    void swap(char &a, char &b)
    {
        char tmp = b;
        b = a;
        a = tmp;
    }
    
    void swap_str(char* str, int start, int end)
    {
        assert(str!=NULL && start <= end);
        int low = start;
        int high = end;
        //整个句子按字符翻转
        while (low < high)
        {
            swap(str[low], str[high]);
            low++;
            high--;
        }
    }
    
    void reverse_word(char str[])
    {
        int len = strlen(str);
        //翻转整个句子
        swap_str(str, 0, len-1);
        int s = 0;
        int e = 0;
        //翻转每一个单词
        for (int i=0; i<len; i++)
        {
            e = i;
            if (str[e] == ' ')
            {
                //str[e]为空格,所以范围是[s,e-1].
                swap_str(str, s, e-1);
                s = e + 1;
            }
        }
    }
    
    int main()
    {
        char str[]="I am a student.";
        reverse_word(str);
        cout<<str<<endl;
        return 0;
    }
    


  • 相关阅读:
    (转)投票系统,更改ip刷票
    图像判断(转)
    第06组 Alpha事后诸葛亮
    第06组 Alpha冲刺(6/6)
    2019 SDN上机第4次作业
    第06组 Alpha冲刺(5/6)
    第06组 Alpha冲刺(4/6)
    第06组 Alpha冲刺(3/6)
    第06组 Alpha冲刺(2/6)
    2019 SDN上机第3次作业
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6923166.html
Copyright © 2020-2023  润新知