【背景】
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博客
具体要求不一样,代码的逻辑和功能就不一样,要活学活用,不能一概而论,还是多实践比较好!