蕙麓

Email:oxionghui@gmail.com

  C++博客 :: 首页 :: 新随笔 :: 联系 ::  :: 管理 ::
1、Strcat函数原型如下:
 1 char *strcat(char *strDest, const char *strScr)      //将源字符串加const,表明其为输入参数
 2 {
 3        char * address = strDest;                      //该语句若放在assert之后,编译出错
 4        assert((strDest != NULL) && (strScr != NULL)); //对源地址和目的地址加非0断言
 5        while(*strDest)                            //是while(*strDest!=’\0’)的简化形式
 6        {                                    //若使用while(*strDest++),则会出错,因为++是不受循环
 7               strDest++;                          //约束的。所以要在循环体内++;因为要是*strDest最后指
 8        }                                  //向该字符串的结束标志’\0’。
 9        while(*strDest++ = *strScr++)         //是while((*strDest++ = *strScr++)!=’\0’)的简化形式
10        {
11               NULL;                               //该循环条件内可以用++,
12        }                                     //此处可以加语句*strDest=’\0’;有无必要?
13 return address;                              //为了实现链式操作,将目的地址返回
14 }
2、Strcpy函数原型如下:
 1 char *strcpy(char *strDest, const char *strScr)
 2 {
 3        char *address=strDest;
 4        assert((strDest != NULL) && (strScr != NULL));
 5        while(*strScr)                   //是while(*strScr != ’\0’)的简化形式;
 6        {
 7               *strDest++ = *strScr++;
 8        }
 9        *strDest = '\0';                       //当strScr字符串长度小于原strDest字符串长度
10        return address;                      //时,如果没有改语句,就会出错了。
11 }
3、Strcmp函数原型如下:
 1 int strcmp (const char *str1,const char *str2)
 2 {           
 3        int len = 0;
 4        assert((str1 != '\0') && (str2 != '\0'));
 5        while(*str1 && *str2 && (*str1 == *str2))
 6        {
 7               str1++;
 8               str2++;
 9        }
10        return *str1-*str2;
11 }
4、Strlen函数原型如下:
 1 int strlen(const char *str)
 2 {
 3     int len = 0;
 4        assert(str != NULL);
 5        while(*str++)
 6        {
 7               len++;
 8        }
 9        return len;
10 }
5 strstr()函数
/**
做一个程序模拟C++中的strstr()函数。strstr()函数是把主串中的子串及以后的字符全部返回。比如主串是"123456",子串是“234”,那么函数的返回值就是“23456”。
**/
 1 #include <iostream>
 2 using namespace std;
 3 
 4 const char *strstr1(const char *stringconst char *strcharset)
 5 {
 6     for(int i =0; string[i] != '\0'; i++)
 7     {
 8         int j = 0;
 9         if(string[i] == strcharset[j])
10         {
11             int temp = i;
12             while(string[i++] == strcharset[j++])
13             {
14                 if(strcharset[j] == '\0')
15                     return &string[i-j];
16             }
17             i = temp;
18         }
19     }
20     return NULL;
21 }
22 
6 希尔排序
 1 #include <iostream>
 2 
 3 using namespace std;
 4 template<typename T>
 5 
 6 void shell(T r[], int n)
 7 {
 8     int i,j,k;
 9     k = n/2;
10     while( k>= 1)
11     {
12         for(i = k+1; i <= n; i++)
13         {
14             r[0] = r[i];
15             j = i - k;
16             while(r[j] > r[0] && j>=0)
17             {
18                 r[j+k] = r[j];
19                 j = j - k;
20             }
21             r[j+k] = r[0];
22         }
23         k = k/2;
24     }
25 }

//一个简单字符串类实现
 1 class MyString
 2 {
 3 public:
 4     MyString(const char *str = NULL)  //普通构造函数
 5     {
 6         if(str == NULL)
 7         {
 8             m_data = new char[1];
 9             ASSERT(m_data != NULL);
10             *m_data = '\0';
11         }
12         else
13         {
14             int length = strlen(str);
15             m_data = new char[length+1];
16             ASSERT(m_data != NULL);
17             strcpy(m_data,str);
18         }
19     }
20 
21     MyString(const MyString &other)     //拷贝构造函数
22     {
23         int length = strlen(other.m_data);
24         m_data = new char[length+1];
25         ASSERT(m_data != NULL);
26         strcpy(m_data,other.m_data);
27     }
28 
29     ~MyString(void)
30     {
31         delete []m_data;
32     }
33 
34     MyString &operate =(const MyString &other)   //“=”运算符重载
35     {
36         if(this == &other)    //检查自赋值
37             return *this;
38 
39         delete [] m_data;  //释放原有的资源
40 
41         int length = strlen(other.m_data);
42         m_data = new char[length+1];
43         ASSERT(m_data != NULL);
44         strcpy(m_data,other.m_data);
45 
46         return *this;
47     }
48 
49 private:
50     char *m_data;
51 
52 }
posted on 2012-03-11 19:58 蕙麓 阅读(397) 评论(2)  编辑 收藏 引用 所属分类: 基础类

评论

# re: 笔记整理(一) 2012-03-16 22:00 Adoo
熊哥,笔记有进步啊。 前两篇基本上没感觉你说点实际的东西,这篇不错。  回复  更多评论
  

# re: 笔记整理(一) 2012-03-17 11:36 蕙麓
@Adoo见笑了。。。
  回复  更多评论
  


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