百练/ 2016计算机学科夏令营上机考试:B

题目来源:http://bailian.openjudge.cn/practice/4104/

4104:单词翻转

总时间限制: 1000ms      内存限制: 65536kB

描述

输入一个句子(一行),将句子中的每一个单词翻转后输出。

输入

只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。

输出

翻转每一个单词后的字符串,单词之间的空格需与原文一致。

样例输入

hello world

样例输出

olleh dlrow

-----------------------------------------------------

解题思路

本题难点在于两个单词之间可能有不止一个空格

cin.getline()一次读入一行到字符数组

3个变量 i,j,beg 分别记录当前位置、下一个‘’或‘\0’的位置

-----------------------------------------------------

代码

#include
using namespace std;

int main()
{
    char s[501] = {0};
    int i = 0, len = 0, j = 0, beg = 0; // i:当前位置; j:下一个' '或'\0'的位置; beg:当前单词的开始
    cin.getline(s, 500);
    while (i<=500 && s[i] != '\0')
    {
        if (i==0)
        {
            beg = 0;
        }
        else if (s[i]!=' ' && s[i-1]==' ')
        {
            beg = i;
        }
        if (s[i] != ' ')
        {
            j = i;
            while (s[j]!=' ' && s[j]!='\0')
            {
                j++;
            }
            if (s[i] != ' ')
            {
                cout << s[beg + j-i-1];
            }
        }
        else
        {
            cout << s[i];
        }
        i++;
    }
}


你可能感兴趣的:(百练OJ/poj)