输入一行字符串,把字符串翻转[单词顺序不变]

输入一行字符串,把字符串翻转 。
例如:
Input: I____am__a__student
Output: student__a__am____I
(__代表空格)

#include<stdio.h>
#include<stdlib.h>

void my_reverse(char *left, char * right)
{
    //assert(left);
    //assert(right); 用以处理指针函数为空,保证有效
    while (left < right)
    {
        char tmp = *left;  //借助中间变量实现逆置
        *left = *right;
        *right = tmp;
        left++;
        right--;
    }
}
int my_strlen(char *str)//得到数组长度定义求取字符串长度的函数
{
    int count = 0;
    while (*str++)
    {
        count++;
    }
    return count; //返回count指向int型的具体值
}
void reverse(char arr[])  //char *arr
{
    char *pstart = arr;
    char *pend = arr + my_strlen(arr) - 1; //注意数组从0开始
    char *pcur = NULL;
    if ((arr == NULL) || (arr[0] == '\0')) //空数组或数组结束,不处理
    {
        return;
    }
    my_reverse(pstart, pend);  //逆置整个数组
    while (*arr)//不为NULL,为‘\0’的情况
    {
        pcur = arr;  //数组开始地址
        while (*arr != '\0' && *arr != ' ')  //在单词内部时
        {
            arr++;
        }
        pend = arr - 1;  //退一位
        my_reverse(pcur, pend);    //逆置遇到空格的单词
        if (*arr == ' ')  //说明后面还有单词 
        {
            arr++;
        }
    }
}
int main()
{
    char arr[100];
    gets(arr);
    //先将字符串逆置,再遇到空格处将该单词逆置即可
    reverse(arr);
    printf("%s\n", arr);

    system("pause");
    return 0;
}

这里写图片描述

你可能感兴趣的:(输入一行字符串,把字符串翻转[单词顺序不变])