斗----自尊、自强、自信

蜗牛慢慢爬,只要不停下来就好~~

博客园 首页 新随笔 联系 订阅 管理
原文地址:http://blog.sina.com.cn/s/blog_4a84b9bb0100061l.html
做了小的修改,适用情况是:标点符号在单词后面,最后一个单词后没有空格
#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;
}

posted on 2007-12-22 21:54  a斗  阅读(732)  评论(0编辑  收藏  举报