学习C语言基础

1.比较是否有等字符
方法:开辟一个数组,大的数组空间,以ASCII码为索引,设置数组值,每次设置前判断是否已设置,如果是,说明有相等的,且知道是哪个字母相同。字母的ASCII码最大为122,所以数组空间至少122个。
用例:无论是比较同一个字符串或字符数组中是否有相同的字符,还是对比两个字符串之间是否有相同字符,都可参靠此方法;
实现
bool IsAllCharUnique(char *s)
{
    char char_set[256] = {0};
    int val = 0;
    while(val = *s++)//1.赋值操作本身有返回值,返回赋值本身,这也是为什么赋值运算可以连续操作即a=b=c;2.字符串最后有NULL
    { 
        if(char_set[val]) 
            return false;
        char_set[val] = 1;
    }
    return true;
}
注意:1.字符串结束符的使用;2.赋值运算返回值的使用;3.使用被判定字符ASCII码作为索引开辟数组记录字符出现的情况,是用空间换时间,较少了时间复杂度


2.将一个字符串颠倒顺序?
方法:使用连个指针,分别指向字符串头和尾,使用中间变量倒换,直至头指针的值不在小于尾指针的值;
实现

void reverse(char *s)
{
    char *t = s;
    char tmp;
    if(s)
    {
        while(*t)
            t++;
        t--;//上循环让t走到字符串尾部,指向了NULL,必须退回一个才能真正指向字符串的最后一个
        while(s < t)
        {
            tmp  = *s;
            *s++ =  *t;
            *t-- = tmp;
        }
    }
}

注意:此处实参传入的是字符数组名,还是初始化为指向字符串的指针,会带来不同问题,后者会报错!(忽然想到,我这里所说的“初始化为指向字符串的指针”做实参报错,是因为它是字符串常量的指针,其内容是不允许被改变的!!!)

……(待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值