加入收藏 | 设为首页 | 会员中心 | 我要投稿 武汉站长网 (https://www.027zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

C语言教程 字符串函数

发布时间:2022-11-04 13:31:14 所属栏目:MsSql教程 来源:网络
导读: 本文讲解C语言里字符串的处理函数
常用的字符串函数有:
int strlen(char *str);
返回字符串的长度,不包括结尾的0,比如"abc\0"的长度为3
int len;
char str[] ="1234567890";
len =strle

本文讲解C语言里字符串的处理函数

常用的字符串函数有:

int strlen(char *str);

返回字符串的长度,不包括结尾的0,比如"abc\0"的长度为3

int len;
char str[] ="1234567890";
len =strlen(str);  // len为10
char b=str[len-1];   // b为'0'

strcpy(char *dest_str, char *src_str);

复制src_str到dest_str,dest_str分配的空间大小要比src_str大或相等Mssq字符串函数,会自动在dest_str后添加一个0,所以dest_str分配的空间长度至少要比src_str字符串的长度大1

比如

char abc[5];
strcpy(abc, "hello");

则会导致内存错误,因为hello的长度为5,"hello"实际分配的空间为6,因为是字符串,后面要自动带一个0表明字符串的截止,所以abc分配的空间大小也要为6,复制"hello"过去后自动在后面添加一个0

strncpy(char *dest_str, char *src_str, int copy_len);

这个函数复制src_str的copy_len长度的一部分字符到dest_str,不会自动在dest_str的后面加0,一般要自己手动在后面加0:

char abc[6];
strcpy(abc, "hello world", 5);
abc[5] =0;

复制"hello"到abc

char *strcat(char *str, char *str_add);

strcat将str_add字符串复制到str的尾部,要注意str字符串分配的空间一定要能把str_add添加过来。

strncat是将一个字符串的某段长度的内容添加过来

char *strstr(char *str, char *sub_str);

strstr函数用来查找子串:

char *abc ="hello world!";
char *p =strstr(abc, "hello");
char *p2 =strstr(abc, "world");

此时p指向的是"hello world!",p2指向的是"world!"

我们可以使用指针相减得到一个子串:

char *abc ="1234567890";
char *p =strstr(abc, "567");  //p="567890"
char str[20];
strncpy(str, abc, p-abc);  //p-abc=4
str[p-abc] =0;

此时指针的位置"(abc)1234(p)567890",所以p-abc则是4,strncpy(str, abc, p-abc)则是复制abc的4个字符到str,也就是"1234",str[p-abc] =0则是str[4] =0;

char *strchr(char *str, char c);

是在字符串str中查找字符c,比如下面一个创建各级目录的程序:

char *path="c:\\test\\test2\\test3";
char path2[256];
char *p = path, *p2;
while (*p)
{
	p2 =strchr(p, '\\');
	if (p2)
	{
		strncpy(path2, path, p2 - path);
		path2[p2 - path] = 0;
		if (path2[0] != 0)
		if (_access(path2, 0) != 0 && _mkdir(path2) != 0)
			return -1;
		//	printf("create path %s failed!\n", path2);
	}else break;
	p =p2+1;
}
if (_mkdir(path) != 0) return -1;

此代码一级一级的查找子目录,一个一个的创建它。

char *strrchr(char *str, char c);

strrchr从右边查找c,或者说查找最后一个c

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

strcmp比较两个字符串,如果两个字符串完全相同,则返回0,大写小写为不同的字母。

int stricmp(char *str1, char *str2);

stricmp函数比较两个字符串,忽略大小写,大写和小写字母视同相同字母

strncmp和strnicmp是比较两个字符串,但限定比较某个长度内

char *strtok(char *buf, char *searchs);

strtok函数查找buf中的searchs包含的任一个字符,找到就将此位置设为0,返回值指向找到的位置的前面的字符串,没找到则返回NULL,如果buf为NULL则表示从当前找到的位置继续查找,比如下面的例子:

char *str="abc|222|fff\n";
char sub_str[3][10];
char *p =strtok(str, "|");  // 找到第一个|并改为0,str变成"abc\0222|fff",p指向str
strcpy(sub_str[0], p);  // p指向str,实际使用的时候一般要判断p是否为空: if(p)
p =strtok(NULL, "|");  // 从刚才\0也就是NULL的位置继续查找,找到就填0,返回前面的字符串
strcpy(sub_str[1], p);  // p是"222";
p =strtok(NULL, "|);  p是"fff\n";
strcpy(sub_str[2], p);
strtok(sub_str[2], "\r\n");  // 截取掉后面的\r和\n, sub_str[2]变成"fff"
p =strtok(NULL, "|");   // 此时p就是NULL了

我们也可以使用strchr实现上面的代码:

char *str="abc|222|fff\n";
char sub_str[3][10];
char *p, *p2;
p =strchr(str, '|');  // p为"|222|fff\n"
*p =0;  // 把'|'替换为\0,截断字符串
strcpy(sub_str[0], str);  // str变成了"abc"
p2 =p+1;  // p2越过刚才的\0,指向"222|fff\n"
p =strchr(p2, '|');  // 查找第二个'|', p是"|fff\n"
*p =0;  // p2变成了"222";
strcpy(sub_str[1], p2);
p2 =p+1;  // p2为"fff\n"
strcpy(sub_str[2], p2);
strtok(sub_str[2], "\r\n");  // 截取掉后面的\r和\n, sub_str[2]变成"fff"

strtok函数在多线程下使用可能会冲突,要用strtok_s函数代替

char *strlwr(char *str);

strlwr将一个字符串转换为小写

char *strupr(char *str);

strupr将一个字符串转换为大写

sprintf(char *buf, char *fmt, ...);

sprintf将各种类型的数据结合格式输出fmt,转换到字符串buf,如果要把很多不同类型的数据整合一起输出,一般都是用sprintf函数:

int num=10;
char *name="XiaoMing";
int age=20;
char buf[100];
sprintf(buf, "user name: %s, num %d, age %d", name, num, age);

atoi和itoa函数, atof, ftoa函数,字符串和整型、浮点型数据转换

(编辑:武汉站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!