0
点赞
收藏
分享

微信扫一扫

字符串处理.C

小龟老师 2022-07-18 阅读 49

@[TOC]

关于 mem是内存拷贝 str是字符串拷贝? 什么鬼???

memset 初始化数组

void *memset(void *str, int c, size_t n)

参数1:被初始化的对象 参数2:用什么初始化 参数3:从头开始,初始化几个参数2 返回str的指针

#include <stdio.h>
#include <string.h>

int main ()
{
char str[50];

strcpy(str,"dqx is handsome very much");
puts(str);

memset(str,'x',3);
puts(str);

return(0);
}

输出

dqx is handsome very much
xxx is handsome very much

重要的利用

memset(dest, '\0', sizeof(dest));

我们这样初始化,就不怕不输出停止 每一个都是终止符号

strcat 衔接append

char *strcat(char *dest, const char *src)

把参数2衔接到参数1 返回参数1的地址

strncat 衔接字符串

char *strncat(char *dest, const char *src, size_t n)

把参数2的前n个衔接到参数1 返回参数1的指针

我们衔接的是字符串不是字符….

strchr 暂时没有找到与memchr的区别

char *strchr(const char *str, int c)

查找参数c在参数str的地址,饭后就函数返回 找不到就返回null

#include <stdio.h>
#include <string.h>

int main ()
{
const char str[] = "http://www.runoob.com";
const char ch = '.';
char *ret;

ret = strchr(str, ch);

printf("|%c| 之后的字符串是 - |%s|\n", ch, ret);

return(0);
}

输出=

符号<.> 之后的字符串是 <.runoob.com>    

strcmp比较所有的….

int strcmp(const char *str1, const char *str2)

strncmp 比较前n个

int strncmp(const char *str1, const char *str2, size_t n)

不多说 ...

比较参数1与参数2 直到出现不同的字符或遇 \0 为止。

如果返回值小于 0,则表示 str1 小于 str2。 如果返回值大于 0,则表示 str1 大于 str2。 如果返回值等于 0,则表示 str1 等于 str2。

strcpy 复制

char* strcpy(char*D,char*S);

他会把S源的字符串部分给复制过去,​​包括了复制​​​源字符串的​​‘\0’​

于是D地长度变化是字符串长度+1

#include <stdio.h>
#include <string.h>

int main()
{
char S[40]="AAABBB";
char D[100];
char* buff;

buff=strcpy(D, S);

printf("最终的目标字符串: %s\n", buff);

return(0);
}

话不多说

输出

最终的目标字符串: AAABBB

--------------------------------
Process exited after 0.01031 seconds with return value 0
请按任意键继续. . .

strncpy 话不多说

char *strncpy(char *dest, const char *src, size_t n)

它的弊端….就是最后复制过去后他不会给你的末尾添加一个结束标志​​0​

#include <stdio.h>
#include <string.h>
#include<stdlib.h>

int main()
{
char S[40]="AAABBB";
char D[12];
int i=0;


strncpy(D, S, 6);


for(i=0;i<10;i++)
printf("%d ",D[i]);

return(0);
}

输出

65 65 65 66 66 66 -1 -1 50 0
--------------------------------
Process exited after 0.01039 seconds with return value 0
请按任意键继续. . .

补救的方法有2种

  1. 用memset把D的所有位置都清空
  2. 在D的末尾手动写上​​'\0'​
  3. 在定义的时候就D[10]={0},那么后面的数据都被初始化为0

memcpy() 任意内容的复制

他复制的内容是一五一十的复制,,不会存在特地的为你的D添加一个​​\0​​,或者说是给你的…

#include <stdio.h>
#include <string.h>

int main()
{
char S[40]="AAABBB";
char D[100]={89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,89,};
char* buff;

buff=memcpy(D, S,5);

printf("最终的目标字符串: %s\n", buff);

return(0);
}

输出

最终的目标字符串: AAABBYYYYYYYYYYYY

--------------------------------
Process exited after 0.01094 seconds with return value 0
请按任意键继续. . .

如何解决字符串末尾​​‘\0’​​的问题???

复制多少个字节​​strlen(S)+1​

就可以把字符串的​​0​​耶一样的复制进去

strlen 返回字符串长度

size_t strlen(const char *str)

参数是一个要被计算长度的字符串 返回字符串长度 读取长度的时候,遇到结束字符,但不包括空结束字符。就结束读取

#include <stdio.h>
#include <string.h>

int main ()
{
char str[50];
int len;

strcpy(str, "dqx");

len = strlen(str);
printf("|%s| 的长度是 |%d|\n", str, len);

return(0);
}

@[TOC]

memchr()

void *memchr(const void *str, int c, size_t n)

参数onst void *str 被检索的字符串指针 参数 size_t n 检索多少个字节,从头部来看的话

#include <stdio.h>
#include <string.h>

int main ()
{
const char str[] = "dqx is A good Boy";
const char key = ' ';
char *ret;

ret = (char*)memchr(str, key ,strlen(str));

printf("|%c| 之后的字符串是 - |%s|\n", key, ret);

return(0);
}

输出

| | 之后的字符串是 - | is A good Boy|

memcmp

int memcmp(const void *str1, const void *str2, size_t n)

把存储区 str1 和存储区 str2 的前 n 个字节进行比较。

#include <stdio.h>
#include <string.h>

int main ()
{
char str1[15];
char str2[15];
int ret;

memcpy(str1, "ABcdEF", 6);
memcpy(str2, "ABCDEF", 6);

ret = memcmp(str1, str2, 5);

if(ret > 0)
{
printf("str2 小于 str1");
}
else if(ret < 0)
{
printf("str1 小于 str2");
}
else
{
printf("str1 等于 str2");
}

return(0);
}

strtok

举报

相关推荐

0 条评论