OnTheWay2012
埋葬昨天的我,迎来重生的我!
posts - 15,  comments - 89,  trackbacks - 0
大家在面试的时候或者在网络上经常会看到让写一个字符串反转的函数的这种题。
以下是我自己写的字符串反转的函数,恳请各位指教。
char *Reverse_1(char *str)和char *Reverse_2(char *str) 实现的功能是把字符串反转,例如把helloworld反转为dlrowolleh。
char *Reverse_3(char *str)实现把this is a string反转为string is a this的功能。
  1#include <iostream>
  2#include <assert.h>
  3
  4using namespace std;
  5
  6char *Reverse_1(char *str)
  7{
  8    assert(NULL != str);
  9
 10    size_t size = strlen(str);
 11    if (NULL != str && 1 < size)
 12    {
 13        for (size_t i = 0 ; i < size / 2 ; i++)
 14        {
 15            char ch = str[i];
 16            str[i] = str[size - i - 1];
 17            str[size - i - 1= ch;
 18        }

 19    }

 20
 21    return str;
 22}

 23
 24//////////////////////////////////////////////////////////////////////////
 25
 26char *Reverse_2(char *str)
 27{
 28    assert(NULL != str);
 29
 30    char *res = str;
 31
 32    size_t size = strlen(str);
 33    if (NULL != str && 1 < size)
 34    {
 35        char *pEnd = str + size - 1;
 36
 37        if(0 == size % 2)
 38        {
 39            do
 40            {
 41                char ch = *str;
 42                *str = *pEnd;
 43                *pEnd = ch;
 44            }
 while(++str != pEnd--);
 45        }

 46        else
 47        {
 48            do
 49            {
 50                char ch = *str;
 51                *str = *pEnd;
 52                *pEnd = ch;
 53            }
 while(++str != --pEnd);
 54        }

 55    }

 56
 57    return res;
 58}

 59
 60//////////////////////////////////////////////////////////////////////////
 61//////////////////////////////////////////////////////////////////////////

 62
 63char *Reverse_3_1(char *str, size_t size)
 64{
 65    assert(NULL != str);
 66
 67    if (NULL != str && 1 < size)
 68    {
 69        for (size_t i = 0 ; i < size / 2 ; i++)
 70        {
 71            char ch = str[i];
 72            str[i] = str[size - i - 1];
 73            str[size - i - 1= ch;
 74        }

 75    }

 76
 77    return str;
 78}

 79
 80char *Reverse_3(char *str)
 81{
 82    assert(NULL != str);
 83
 84    char *res = str;
 85    if (NULL != str && NULL != strchr(str, ' '))//这里的strchr是为了防止出现bug(例如:abc被修改为cba)
 86    {
 87        str = Reverse_3_1(str, strlen(str));
 88        while (true)
 89        {
 90            char *pSubStr = strchr(str, ' ');
 91            if(NULL == pSubStr)
 92            {
 93                Reverse_3_1(str, strlen(str));
 94                break;
 95            }

 96            else
 97            {
 98                Reverse_3_1(str, pSubStr - str);
 99                str = pSubStr + 1;
100            }

101        }

102    }

103
104    return res;
105}

106
107void main()
108{
109    /*
110    以下代码用来测试Reverse_1和Reverse_2
111    char chArr1[] = "";
112    cout<<Reverse_2(chArr1)<<endl;
113    
114    char chArr2[] = "HelloWorld";
115    cout<<Reverse_2(chArr2)<<endl;
116    
117    char chArr3[] = "Hello World";
118    cout<<Reverse_2(chArr3)<<endl;
119    
120    char chArr4[] = "JiShuGe";
121    cout<<Reverse_2(chArr4)<<endl;
122    
123    char chArr5[] = "OuShuGee";
124    cout<<Reverse_2(chArr5)<<endl;
125
126    char chArr6[] = "ab";
127    cout<<Reverse_2(chArr6)<<endl;
128
129    char chArr7[] = "abc";
130    cout<<Reverse_2(chArr7)<<endl;
131    */

132
133    char chArr1[] = "";
134    cout<<Reverse_3(chArr1)<<endl;
135
136    char chArr2[] = "HelloWorld";
137    cout<<Reverse_3(chArr2)<<endl;
138
139    char chArr3[] = "Hello World";
140    cout<<Reverse_3(chArr3)<<endl;
141
142    char chArr4[] = "Ji Shu Ge";
143    cout<<Reverse_3(chArr4)<<endl;
144
145    char chArr5[] = "This is a string";
146    cout<<Reverse_3(chArr5)<<endl;
147
148    char chArr6[] = "HelloWorld ";
149    cout<<Reverse_3(chArr6)<<endl;
150
151    char chArr7[] = " HelloWorld ";
152    cout<<Reverse_3(chArr7)<<endl;
153
154    char chArr8[] = " Hello World ";
155    cout<<Reverse_3(chArr8)<<endl;
156
157    char chArr9[] = " He llo Wor ld ";
158    cout<<Reverse_3(chArr9)<<endl;
159}
posted on 2010-05-08 17:21 OnTheWay 阅读(340) 评论(1)  编辑 收藏 引用 所属分类: 算法

FeedBack:
# re: 反转字符串
2010-05-08 17:45 | 小时候可靓了
就这样一点点写下去,就会很厉害。。。中间不要间断  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2010年5月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿(4)

随笔分类

随笔档案

友情连接

搜索

  •  

最新评论

阅读排行榜

评论排行榜