首页 > 其他 > 详细

单词翻转

时间:2016-03-28 21:35:37      阅读:231      评论:0      收藏:0      [点我收藏+]

问题描述:输入一个英文句子,翻转句子中单词的顺序。要求单词内字符顺序不变,句子中单词由空格隔开。为简单起见,标点符号和普通字母一样处理。例如,若输入"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运行结果:

技术分享

 

单词翻转

原文:http://www.cnblogs.com/zpfbuaa/p/5330567.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!