您的位置:首页 > 编程语言 > C语言/C++

C++练习

2010-05-07 10:49 309 查看
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个数据把100的bool型数组置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; //这个即丢失的数据
评论: 这个算法有局限性, 只能用于处理不重复, 仅有一个数据丢失的情况, 优点是:比上一个算法所需存储空间少.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: