华为机试——字符倒叙输出

C_C++_WY_01. 字符倒叙输出

  • 题目描述:

编写一个函数,将字符串中的每个单词的倒序输出,字符串中以空格分割各个单词,如果碰到数字则跳过。

  • 要求实现函数:

void vConvertMsg(char *pInputStr, long lInputLen, char *pOutputStr);

【输入】

char *pInputStr:指向一个字符串的指针

long lInputLen:该字符串的长度

char *pOutputStr:指向一块输出的内存,和输入的字符串是大小是(lInputLen+1)

【返回】 无

【注意】 只需要完成该函数功能算法,中间不需要有任何IO的输入输出

  • 示例

输入:He is a man no12 3456.

返回:eH si a nam on12 3456.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61

#include <iostream>
#include <string.h>
#include <ctype.h>
using namespace std;
 
void convertWord(char *head, char *tail)
{
    char tmp;
 
    while (head < tail)
    {
        tmp = *head;
        *head = *tail;
        *tail = tmp;
 
        head++;
        tail--;
    }
}
 
void vConvertMsg(char *pInputStr, long lInputLen, char *pOutputStr)
{
    if ((pInputStr == NULL) || (lInputLen <= 0))
    {
        return;
    }
 
    char *head = pInputStr;
    char *tail = pInputStr;
 
    while (*tail != '\0')
    {
        head = tail;
        while (isalpha(*tail) && (*tail != '\0')) //find the end of a word.
        {
            tail++;
        }
 
        tail--; //point to the end of a word.
        convertWord(head, tail);
 
        tail++; //point to the first char that it's not a alpha.
        while ((!isalpha(*tail)) && (*tail != '\0')) //find the head of a word.
        {
            tail++;
        }
    }
 
    strcpy(pOutputStr, pInputStr);
}
 
int main() {
    char pInputStr[] = "He is a man no12 3456";
    char pOutputStr[strlen(pInputStr)+1];
 
    vConvertMsg(pInputStr, strlen(pInputStr), pOutputStr);
 
    cout << pOutputStr << endl;
 
    return 0;
}
posted @ 2013-07-19 16:41  helloweworld  阅读(631)  评论(0编辑  收藏  举报