| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 483 人关注过本帖
标题:Help!!帮我做下这道题吧!!
只看楼主 加入收藏
lrt201136019
Rank: 1
等 级:新手上路
帖 子:54
专家分:2
注 册:2012-3-18
结帖率:50%
收藏
 问题点数:0 回复次数:5 
Help!!帮我做下这道题吧!!
编写函数test2实现两个整数集合x,y的减运算(即从x中删除和y中相同的元素) int test2(int *x,int *y,int m,int n)
搜索更多相关主题的帖子: 元素 
2012-05-18 21:58
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
// 功能:从pAddr中删除和nKey中相同的元素
// 参数:nCount为pAddr数组元素个数
// 返回值: pAddr 后来元素个数
int remove(int *pAddr, int nKey, int nCount)
{
    if (pAddr == 0 || nCount <= 0) {
        return 0;
    }
   
    int i = 0;
    while (i < nCount) {
        if (pAddr[i] == nKey) {
            if (nCount - i > 1) { // 也就是保证nCount - i -1 》 0
                memcpy(&pAddr[i], &pAddr[i+1], nCount - i -1);
            }
            nCount--;
        }
        else {
            i++;
        }
    }

    return nCount;
}

// 功能:从x中删除和y中相同的元素
// 参数:m为x数组的元素个数,n 为y数组元素个数
// 返回值: x后来元素个数
int test2(int *x,int *y,int m,int n)
{
    for (int i = 0; i < n; i++) {
        m = remove(x, y[i], m);
    }

    return m;
}

[ 本帖最后由 yuccn 于 2012-5-20 18:24 编辑 ]

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-05-19 12:17
lrt201136019
Rank: 1
等 级:新手上路
帖 子:54
专家分:2
注 册:2012-3-18
收藏
得分:0 
回复 2楼 yuccn
请问memcpy是什么呀.....这个是用C++写的吗?看不太懂哎
就是那个从X中删除Y到底要怎么写??先不管指针的话
2012-05-19 12:35
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
抱歉,之前那个有个bug,现在修正,并且用红色字体标出。

include一下 windows.h就行了
那个函数是内存拷贝。

memcpy(&pAddr[i], &pAddr[i+1], nCount - i -1);的目的就是删除元素pAddr[i]而已,也就是从i开始后面每个元素靠前一位。
当然可以用一个for循环来代替红色部分,

红色部分可以代替为
for (int j = i; j < nCount - 1; j++) {
    pAddr[j] = pAddr[j+1];     
}


我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-05-20 18:28
jokerskill
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:392
专家分:554
注 册:2012-3-4
收藏
得分:0 
原来你就是大牛我找你找的好苦啊!
技术型的人才啊!这些代码你居然看不晕!!!小飞侠
帮我
2012-05-20 18:34
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
int remove(int *pAddr, int nKey, int nCount)
 {   
    int i = nCount - 1;
     while (i >= 0) {
         if (pAddr[i] == nKey) {
             for (int j = i; j < nCount - 1; j++) {
                 pAddr[j] = pAddr[j+1];
             }
             nCount--;
         }
         i--;
     }
 
    return nCount;
 }
如果不用memcpy,改成这样好理解点吧



注:代码我都没有测试过的,凭感觉写,可能存在bug,^_^只是提供一个思路给你吧。

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-05-20 18:37
快速回复:Help!!帮我做下这道题吧!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016457 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved