C++练习

来源:互联网 发布:php 发送get请求 编辑:程序博客网 时间:2024/06/11 15:11

1. 复制不重叠的内存块

例:void *memcpy(void *pvTo, const void *pvFrom, size_t size)  

{

      assert((pvTo!= NULL) && (pvFrom!= NULL)); //using Assert.  

      byte *pbTo = (byte*) pvTo;           //Protect address of pvTo     

      byte *pbFrom = (byte*)pvFrom;   // Protect address of pvFrom  

      while(size-- >0)      

      {

            *pbTo++ = *pbFrom ++;

      }

      return pvTo;      

} 

2.  串倒置

2.1 在不考虑其中的符号倒置问题, 只考虑简单的一个串倒置

1:可以处理简单的串倒置

void ReverseChar(char* source)

{

      assert(source !=NULL);

      int length =0;

      for(; source[length]!='/0'; length++);

      cout<<"There are :"<<length<<" Chars"<<endl;

 

      char temp;

      for(int i=0; i<length/2; i++)

      {

            temp =source[i];

            source[i]=source[length-i-1];

            source[length-i-1]=temp;

      }

}

2可以处理类似”China”的倒置输出。但对于I love china”的倒置输出就不行了。

#include <algorithm>   //一定要这个支持

int main()

{

      string str1;

      cin>>str1;

        cout<<"Original string:"<<str1<<endl;

      reverse(str1.begin(),str1.end());

        cout<<"String after reverse:"<<str1<<endl;

      return 0;

}

3:这个看上去就经典多了,可以处理:”I love you!”的倒置输出, 这是处理边输入边处理的串

void revers()

{

    int c=getchar();

    if(c!='/n')

        revers();   //

    putchar(c);

}

int main()

{

    revers();

    printf("/n");

    return 0;  

}

3. 找出丢失的数据

1:一个[99]的数组,里面无序放着从1-100的数据,缺少其中一个数据, 不重复,用最快的算法找出

算法1:新建一个[100]bool型数组(节约空间),然后依次用这99个数据把100bool型数组置true,

Bool bMark[100]={false};

For(int i=0; i<99; i++)

{

bMark[Data[i]] =true;  //此处为精髓所在

}

                For(int I =0; i<100; i++)

{

                If (bMark[i]==false){cout<<”this number is missing one”<<Data[i]<<endl;break;}

}

评论:

1.这个算法不仅可用来找一个数据missing 的请况, 多个missing也同样奏效.

2.如果 可能有重复的数据, 则需要用Mark[100]这个数据来存储更多的信息, 可以用int Mark[100]={0}, 如果出现一次, Mark[i]++; 这样同样可以得到遍历的信息.

算法2: 

Int ActualSum = 0, ExpectedSum =0;

For (int i=0; i<99; i++){ActualSum += Data[99];}  //得到实际总和

For (int i=0; i<100; i++){ExpectedSum +=  I;}  //得到期望总和

Int MissingNumber = ExpectedSum – ActualSum; //这个即丢失的数据

评论: 这个算法有局限性, 只能用于处理不重复, 仅有一个数据丢失的情况, 优点是:比上一个算法所需存储空间少.