字符指针及其函数的使用

字符指针

一、字符指针的有关内容

首先需要明确的是,字符串实际就是字符数组。比如说:

char p="hello world";
实际上应该是:

p={'h','e','l','l','o',' ','w','o','r','l','d','\0'};
因此在定义字符串时,我们需将其看作是数组,也就是说:

p <=> p[]
p[1] <=> *(p+1)
这些是等价的
image
如上图所示
同时,在表示函数的参数时,下面二者表述等价。

(char p,char q)
(char *p,char *q)
本质上都是传入了字符串的首地址

二、对字符指针进行操作的函数

先贴一个主函数在这里:

main()
{
char a[] = "hello world111";
char b[] = "hello world22";
char c[] = "hello world";
char *str=c;
int len1,len2,len3,m;

printf("at first\na=%s\nb=%s\nstr=%s\n\n", a,b,str);

len1=strlen(a);
len2=strlen(b);
len3=strlen(str);
printf("The length of a is %d\n",len1);
printf("The length of b is %d\n",len2);
printf("The length of str is %d\n\n",len3);

m=strcmp(a,b);
if(m==0) printf("a=b\n\n");
else printf("a!=b and a minus b is %d\n\n", m);

strcpy(b, str);
printf("after copying str to b, b = %s\n\n", b);

strcat(a,b);
printf("after linking b to the a,a = %s\n", a);
}
对于字符串,我们通常需要进行以下操作:

1.测量字符串的长度(不含'\0'):strlen函数

具体原理是逐个扫描,扫描到'\0'字符为止

int strlen(char s)
{
for(int i=0;
s++;i++);
return i;
}

2.比较两个字符串是否“相等”:strcmp函数

这里的相等指的是每一个字符(直到'\0\为止)都相等。
如果字符串相等,则返回0;
如果不相等,则比较第一次出现不同的字符的ASCII码并相减,并返回差值(前者减后者)
函数如下:

int strcmp(char s, char t)
{
while(
s++==
t++ && s!='\0');
return (
(--s)-*(--t));
}

3.将一个字符串的所有内容“复制粘贴”到另一个字符串中:strcpy函数

需要注意的是,strcpy函数通常是将较“短”的字符串复制粘贴到较“长”的函数中,否则可能会出问题(不然我de了一晚上的bug哪来的)
经过一次次的化简之后:

void strcpy(char *s, char t)
{
while (
s++ = *t++);
}
(ps.第一次感受到了代码简洁的美)

4.将一个字符串中的内容“连接”在另一个的后边:strcat函数

原理是先令被连接字符串的指针先指向自己的'\0'处,再进行连接。

void strcat(char s, char t)
{
while(
s++!='\0');
s--;
while(
s++=*t++);
}

以上便是4个常用的利用字符指针对字符串进行的函数操作。(拖了好长时间终于想起写这个了)

posted @ 2023-12-06 14:59  泽康  阅读(83)  评论(0)    收藏  举报