将字符串中的单词反序

题目描述:现有一个字符串如:This is my book, 请写一个功能函数将这个字符串中的单词反序,处理结果:book my is This

思路:

如下图所示,开辟三块内存,通过strtok取出第一块内存中的第一个单词,通过strcat将单词、空格、pstr3连接放在第二块内存中,再将第二块内存中的内容拷贝到第三块内存中。循环这个过程,直至在第一块内存中取出所有的单词。

c语言程序如下:

/*************************************************************************
 @Author: wanghao
 @Created Time : Mon 20 Aug 2018 08:06:36 PM PDT
 @File Name: test1.c
 @Description:
 ************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int WordReverseInStr(char *str)
{
    int   slen = 0;
    char *pstr1 = NULL;
    char *pstr2 = NULL;
    char *pstr3 = NULL;
    char *p = NULL;

    slen = strlen(str) + 1;

    printf("strlen = %d\n", slen);
    pstr1 = (char *)malloc(slen);
    if(pstr1 == NULL)
    {
        printf("Malloc pstr1 mem fail!\n");
        return -1;
    }

    pstr2 = (char *)malloc(slen);
    if(pstr2 == NULL)
    {
        printf("Malloc pstr2 mem fail!\n");
        return -1;
    }

    pstr3 = (char *)malloc(slen);
    if(pstr3 == NULL)
    {
        printf("Malloc pstr3 mem fail!\n");
        return -1;
    }
    *pstr3 = '\0';

    strncpy(pstr1, str, slen);

    printf("pstr = %s\n",pstr1);
    
    for(p = strtok(pstr1, " "); p != NULL; p = strtok(NULL, " "))
    {
        strcpy(pstr2, p);
        sprintf(pstr2, "%s ",pstr2);
        strcat(pstr2, pstr3);
        strcpy(pstr3, pstr2);
    }

    strcpy(str, pstr3);
    free(pstr1);
    pstr1 = NULL;
    free(pstr2);
    pstr2 = NULL;
    free(pstr3);
    pstr3 = NULL;

    return 0;
}

int main(int argc, const char *argv[])
{
    char str[] = "This     is     my       book    hah    hahha  helllo worpag fedgegh   gregagrg   ag";

    WordReverseInStr(str);

    printf("str = %s\n",str);

    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42048417/article/details/81911772