做了小的修改,适用情况是:标点符号在单词后面,最后一个单词后没有空格
#include "stdafx.h"
#include <string.h>
#include <stdio.h>
/**********************************************************/
//函数名称:_Reverse_Char
//输入参数:char * str,待反转字符串;int iStart,起始位置
// int iEnd,结束位置
//返回值 :char *,反转后字符的指针
//描 述 :反转iStart到字符串iEnd之间的字符串
/**********************************************************/
char * _Reverse_Char( char * str , int iStart , int iEnd )
{
char ch;
//反转字符串
while( iStart < iEnd )
{
ch = str[ iStart ];
str[ iStart ] = str [ iEnd ];
str [ iEnd ] = ch;
iStart ++;
iEnd --;
}
return str;
}
/******************************************************************/
// 函数名称: Reverse_Char
// 输入参数: str,待反转字符串
// 输出参数: char*,反转字符串后的指针
// 描 述: 按单词反转字符串
/******************************************************************/
char * Reverse_Char(char *str)
{
//获取字符串长度
int len = strlen( str );
//反转整个字符串
_Reverse_Char( str, 0 , len-1 );
// 声明变量(单词的开始以及结束默认从0开始)
int iStart(0),iEnd(0),i;
for( i=0;i<len;++i)
{
// 查找空格分割符号
if( str[i] == ' ' )
{
// 找到一个单词
iEnd = i-1;
// 对于只有一个字符的单词比如说(I)没有必要反转
if(iStart < iEnd)
{
// 反转单词
_Reverse_Char(str,iStart,iEnd);
// 记录下一个单词的开始位置
iStart = i+1;
}
}
else if(str[i] == '!' || str[i] == ',' || str[i] == '.')
{
iStart = i+1;
}
}
//处理最后一个单词,最后一个单词后一般没有空格(也就是远字符串第一个单词前基本无空格)
//在前面的步骤中处理不到
iEnd = len-1;
//单个字母的不处理
if( iStart < iEnd )
{
_Reverse_Char(str,iStart,iEnd);
}
return str;
}
int _tmain(int argc, _TCHAR* argv[])
{
char test1[] = "I am the best!!!";
printf("%s\n",test1);
char * test2;
test2 = Reverse_Char( test1 );
printf("%s\n",test2);
return 0;
}