单词翻转

非 Y 不嫁゛ 提交于 2020-03-06 08:33:42

问题描述:输入一个英文句子,翻转句子中单词的顺序。要求单词内字符顺序不变,句子中单词由空格隔开。为简单起见,标点符号和普通字母一样处理。例如,若输入"I am a student.",则输出"student. a am I"

参考思路:首先将整个字符串进行翻转,然后根据空格来实现每个单词的翻转,关键在于判断结束为止以及下一个单词的开始位置。

参考代码:

#include <bits/stdc++.h>

using namespace std;

void swap_str(char* a, char* b)
{
    char t = *a;
    *a = *b;
    *b = t;
}

void str_reverse(char *start, char *over)
{
    while (start < over)
    {
        swap_str(start++, over--);
    }
}

void reverseString(char *s)
{
    char *start = s;
    char *over  = start;

    for ( ; *over!= '\0'; over++ )
    {
    };
    over--;

    str_reverse( start, over );
    start = s;
    over  = start;
    char* end_word = NULL;

    while ( *(over-1) != '\0' )
    {
        if (*over == ' '|| *over == '\0')
        {
            end_word = over-1;
            str_reverse(start, end_word);
            start = over;
            while(*start == ' ')
            {
                start++;
            }
        }
        over++;
    }
}

int main()
{
    char str[] = "I am  a    student.";
    reverseString(str);
    printf("%s\n", str);
}

GCC运行结果:

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!