003_c语言中怎么逐个获取一个字符串的字符?

【背景】

C中关于字符串的操作比较多,尤其是截取,拼接,组装等功能,那么我们今天就说一下,当我们遇到char str[] ="hello world"; char* pstr = "Goodthing.."等串的时候,如何去逐个获取到每个字符

【分析及验证】

在C语言中,可以通过遍历字符串的方式逐个获取字符串的每一个字符。

解法一:使用for循环遍历字符串

void test_98_test()
{
    char str[] = "Hello World!";
    int len = sizeof(str) / sizeof(str[0]);

    for (int i = 0; i < len -1; i++)/*遍历并打印每一个字符*/
    {
        LOGC(str[i]);
    }
}

输出结果如下:

如果我们想把字符中的Wor获取到,可以进行进一步操作,如下:

我们获取到了Wor字符,当然还有其他方式,这里就不一一验证了

解法二:使用while循环遍历字符串

这里主要思想就是,C中的字符串,都有一个标志性结束标志'\0' 那么我们根据这个特点,可以去一直遍历字符串,直到遇到这个标志,说明已经遍历完了,具体实现如下:

void test_99_test()
{
    char str[] = "Hello World!";
    int i = 0;

    while (str[i] != '\0')
    {
        LOGC(str[i]);
        i++;
    }
}

代码效果如下:

那么,我们也可以去做点事情,比如截取前五个字符存到另一个字符数组中去,如下:

void test_99_test()
{
    char str[] = "Hello World!";
    int i = 0;
    char gstr[6] = { 0 };

    while (str[i] != '\0')
    {
        for (; i < 5; i++)
        {
            gstr[i] = str[i];
        }
        LOGC(str[i]);
        i++;
    }
    LOGSS("gstr:: ", gstr);
}

解法三:使用指针遍历字符串

void test_100_test()
{
    char str[] = "Hello World!";
    char* p;

    p = str;
    while (*p != '\0')
    {
        LOGC(*p);
        p++;
    }
}

【总结1】

对于上述三个方法,想必大家都比较熟悉和易懂,因为操作的对象都是字符数组,这个很好理解,要么直接遍历字符数字,要么定义一个char* p; p = str;然后p++;去遍历字符数组,也很好去操作和改变,这里不再赘述,那么要是字符指针呢?比如char* tp = "11:22:33:44:55:66^77:88:99:00:aa:bb^cc:dd:ee:ff:gg:hh^ii:jj:kk:ll:mm:nn";我们想提取最后一个mac呢?或者说想遍历这个指针字符串呢?

解法四:关于指针字符串操作

1.遍历指针字符串

char* p = "1:2:3:4,sjfml";
void test_101_test(char* ptr)
{
    if (ptr)
    {
        while (*ptr != '\0')
        {
            LOGC(*ptr);
            ptr++;
        }
    }

}

2.提取规定字符串

char* tp = "11:22:33:44:55:66^77:88:99:00:aa:bb^cc:dd:ee:ff:gg:hh^ii:jj:kk:ll:mm:nn";
char* ty = "11:22:33:44:55:66";
/*to filter and copy mac*/
void test_96_test(char* tmp)
{
    char rd = '^';
    char* ret;

    if (tmp)
    {
        //length = strlen(tmp);
        ret = strrchr(tmp, rd);
        if (ret)
        {
            LOGS("ret is Not NULL!");
            ret++;
            LOGS(ret);
        }
        else
        {
            LOGS("ret is NULL!");
            LOGS(tmp);
        }
        
    }
}

入参为tp时,如下

入参为ty时,如下

【总结2】

关于指针字符串的操作:拷贝,过滤,截取,比较等,都有相关的函数在string.h头文件中,可以去细看002_[string.h]c标准库函数之<string.h>_c++ string.h-CSDN博客

具体要求不一样,代码的逻辑和功能就不一样,要活学活用,不能一概而论,还是多实践比较好!

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值