memset

本文介绍了一种用于判断两个字符串经过字符位置修改后能否变为相同字符串的算法,并详细解析了使用C++实现的具体过程。文中还深入探讨了memset函数的正确用法及其在数组初始化中的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天做在线测评,判断两个string修改字符位置后是否能变成同一字符串

class Same {
public:
    bool checkSam(string stringA, string stringB) {
        unsigned int lenA=stringA.size();
        if(lenA!=stringB.size())
            return false;
        int arrayA[256];
        for(int i=0;i<256;i++)
            arrayA[i]=0;
//      memset(arrayA,0,256);
        for(unsigned int i=0;i<lenA;i++){
            arrayA[stringA[i]]++;
            arrayA[stringB[i]]--;      
        }
        for(unsigned int i=0;i<256;i++)
            if(arrayA[i]!=0)
                return false;
        return true;
    }
};

用上式的memset的时候显示测试用例不过,修改成for循环赋值后马上通过,然后查了一下memset的用法,

发现是第三个参数错误,修改成

memset(arrayA,0,sizeof(int)*256)

修改之后arrayA中数都变成0值,但是若写成

memset(arrayA,2sizeof(int)*5)

arrayA的元素全部被初始化为

memset是按字节赋值的,sizeof(int)=4,每个int占四个字节,所以第一次将第三个参数设置为5

其实只给arrayA[0]赋0值,而上面用ASCII为2的字符填充,转化为二进制,一个字节为000000010,

四个字节就是00000010000000100000001000000010,等于33686018,这就是memset对数组的赋值.

extern void *memset(void *buffer, int c, int count)是在buffer中将前n个字节全部填充为c的ASCII值,是字符串函数。

一般第一个参数buffer是char*型的,char为一个字节。

用来初始化int数组时,可以初始化为 0 或者是 -1,其他值不可以。

 

转载于:https://www.cnblogs.com/Aspirin-Fight/p/4736680.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值