给一句话,在不改变单词的情况下将这句话倒着输出,如 : give me the book -----> book the me give 注意语句中的空格。
代码如下:
> File Name: string.c
> Author: hai--feng
> Mail: haifeng@126.com
> Created Time: Mon 25 Jun 2012 11:05:46 AM CST
************************************************************************/
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
//给指针分配空间
char *GetSpace(const char *str1)
char *str = NULL;
assert(str1);
str = (char *)malloc(strlen(str1)+1);
if(str == NULL)
{
return NULL;
}
return str;
}
//先反转整句话
{
char *p = NULL;
int len = 0;
int i = 0;
assert(str1 && str2);
if(0 != (len = strlen(str1)))
{
p = (char *)&str1[len-1];
for(i = 0; p != str1, i < len; p--,i++)
{
str2[i] = *p;
}
str2[i] = *p;
}
}
//再将每个单词翻转过来
{
char *ptr = NULL;
char *pdes = NULL;
char *psave = NULL;
int headflag = 0;
assert(str2 && str3);
ptr = str2;
pdes = str3;
while(*ptr != '\0')
{
//处理前面的空格
{
if(*ptr == ' ')
{
*pdes++ = *ptr++;
}
if(*ptr != ' ')
{
headflag = 1;
}
}
else
{
//寻找单词后面的空格
{
ptr++;
}
//保存空格的位置
psave = ptr;
ptr--;
//将单词正常写到另一个字符串
{
if(*ptr == ' ' && ptr != psave)
{
break;
}
*pdes++ = *ptr--;
}
//重新得到空格位置
ptr = psave;
psave = NULL;
//如果是空格就直接赋值
if(*ptr == ' ')
{
*pdes++ = *ptr++;
}
}
}
*pdes = *ptr;
}
int main(void)
{
char *str1 = " hai feng cheng gong ";
char *str2 = NULL;
char *str3 = NULL;
str2 = GetSpace(str1);
str3 = GetSpace(str1);
ReverseWholeString(str1, str2);
ReverseEachString(str2, str3);
printf("str1 = %s\n",str1);
printf("str2 = %s\n",str2);
printf("str3 = %s\n",str3);
return 0;
}
运行结果为:
str1 = hai feng cheng gong
str2 = gnog gnehc gnef iah
str3 = gong cheng feng hai