C/C++学习笔记29:字符串处理函数

来源:互联网 发布:数控电脑编程软件 编辑:程序博客网 时间:2024/05/02 00:52

常见的字符串处理函数有:

size_t strlen(cs); //求出cs的长度
gets(str);puts(str);


char *strcpy(s,ct);//把ct复制到s中去char *strncpy(s,ct,n);//把ct中的n个字符复制到s中去
char *strcat(s,ct);//把ct复制到s字符串之后char *strncat(s,n,ct);//复制ct中的n个字符到s中去
int strcmp(cs,ct);//比较cs与ct的大小,分别返回正值、0、负值int strncmp(cs,n,ct);//比较cs和ct的大小,最多比较n个字符
char *strchr(cs,c);//在cs中查找第一个c出现的位置,并用指向这个位置的指针表示,如果没有则返回null;char *strrchr(cs,c);//在cs中查找最后一个c出现的位置
size_t strspn(cs,ct);//在cs中查找全部由ct里字符组成的序列,并返回其长度size_t strcspn(cs,ct);//在cs中查找全部由非ct里字符组成的序列,并返回其长度
char *strpbrk(cs,ct);//在cs里查找ct里的字符,返回第一个满足条件的字符出现的位置,没有时返回NULLchar *strstr(cs,ct);//在cs中查寻串ct(查询子串),返回ct作为cs的子串的第一个出现的位置,ct未出现在cs里时返回NULL
<pre name="code" class="cpp">char *strerror(n);//返回与错误编号n相关的错误信息串(指向该错误信息串的指针)char *strtok(s,ct); //在s中查寻由ct中的字符作为分隔符而形成的单词
strstr(string,search);//搜索一个字符串在另一个字符串中第一次出现

关于字符数组的问题

在C语言中字符串是作为字符数组来处理的。

e.g.1:已知strcpy函数的原型是:char *strcpy(char *strDest,const char *strSrc);

(1)不调用C++/C的库函数,请编写strcpy。

实现:

char *strcpy(char *strDest,const char *strSrc);{     assert((strDest != NULL)&&(strSrc!=NULL));     char *address=strDest;     while((*strDest++=*strSrc++)!='\0')     NULL;     return address;}
关于上述的assert函数,assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行。涉及到的一些标准库常用函数,在之后会详细总结。

(2)strcpy能把strSrc的内容复制到strDest,为什么还要char *类型的返回值?

为了实现一些链式表达式,比如说我用strcpy实现了复制,但是我还想得到复制过后的字符串长度是多少,可以进行如下操作:

int length = strlen(strcpy(strDest,"hello world"));


e.g.2:下面的程序会出现何种问题?

#include <iostream>#include <stdio.h>int main(void){    char s[]="123456789";    char d[]="123";    strcpy(d,s);    printf("%s,\n%s",d,s);    return 0;}
以上的输出结果是123456789,56789;

原因在于当初分配的内存地址是连续内存的问题。

0 0
原创粉丝点击