将字符串中的单词反序
题目描述:现有一个字符串如: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;
}