C语言:字符串处理类函数

strlen() 求字符串的实际长度(不包括'\0')  

strcpy()

char *strcpy(char* dest, const char *src);

strcpy(目标串,源串);

strcpy(s2, s1);

char s1[80] = “张三”;

char s2[80];

// 希望能把s1中所存储的字符串,复制到s2数组中。

s2 = s1;

上述语句是错误的,因为数组名称是常量,常量不能赋值!

不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。

 

扫描二维码关注公众号,回复: 4227917 查看本文章

若必须实现这个功能,则,必须借助C语言所提供的一个函数:strcpy();

strcpy()函数的本质含义:将以第二个参数作为首地址所指向的空间开始遇0则止的字符,复制到以第一个参数作为首地址所指向的字节开始的连续存储空间中。

 

src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

返回指向dest的指针

strncpy() char *strncpy(char *dest, const char *src, int n) 把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest。

strcat()

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

 

把src所指向的字符串(包括“\0”)复制到dest所指向的字符串后面(删除*dest原来末尾的“\0”)。要保证*dest足够长,以容纳被复制进来的*src。*src中原有的字符不变。

返回指向dest的指针

strcmp()

字符串内容的比较

extern int strcmp(const char *s1, const char *s2);

以前曾经说过这样的问题:

printf(“%d\n”, “abcd” > “xyz”);

上述比较本质是:字符串的首地址比较,与其内容无关;若想进行字符串内容的大小比较,需要用到函数:strcmp() 。

 

两个字符串内容(ASCII码值)的大小比较;

函数返回值有三种情况:

1、返回值为1,则,s1所指向的串大于s2所指向的串;

2、返回值为0,则,s1所指向的串等于s2所指向的串;

3、返回值为-1,则,s1所指向的串小于s2所指向的串;

 

字符串内容大小比较的方法:

两个字符串都从第一个字符开始比较,若相同,则比较下一个字符,直到遇到0结束标志;只要有一次字符大小(ASCII码值)不同,则,比较结束。

strchr()

查找字符串s中首次出现字符c的位置

extern char *strchr(const char *s,char c)

功能:若c存在于s所指向的字符串中,则,函数返回c在s所指向的字符串中第一次出现的位置(地址值);若c不在s所指向的字符串中,则,函数返回NULL(0)。

 

p = strchr(“abcdeaabbcde”, ‘e’);

则,p将指向下标为4的字符e;也就是说,p的值是e的首地址。

在上述操作基础上,再进一步执行下面的语句,就可以找到第二个’e’:

p = strchr(p+1, ‘e’);

例子见下面

strlwr()

extern char *strlwr(char *s);

STRing LoWeRcase(字符串小写)

功能:将字符串s参数转换为小写形式

说明:只转换s参数中出现的大写字母,不改变其它字符。返回指向s参数的指针

兼容性说明:strlwr不是标准C库函数,只能在VC中使用。

strupr()

extern char *strupr(char *s);

STRing UPpeRcase(字符串大写)

将字符串s转换为大写形式。

说明:只转换s中出现的小写字母,不改变其它字符。返回指向s的指针

兼容性说明:strupr不是标准C库函数,只能在VC中使用。

//找一个字符在字符串中出现的所有位置
#include<stdio.h>
#include<string.h>

void main(void){
    char st[20] = {"avbxgadsca"};

//右边的结果说明:没有被赋值的元素全部被系统赋值为零结束标志
    char *p = NULL;
    int i;
    
    for(i = 0; i < 20; i++){
        printf("%-3d    ", st[i]);
        printf("%c    ", st[i]);
        printf("%p\n", &st[i]);
    }

    for(p = st; *p; ){
        p = strchr(p, 'a');
        if(p != NULL){
            printf("%p ", p);
            p++;
        }
    }
    printf("\n");
}

//找一个字符在字符串中出现的所有位置
#include<stdio.h>
#include<string.h>

void main(void){
	char st[20] = {"avbxgadsca"};
	char *p = NULL;
	int i;
	
	for(i = 0; i < 20; i++){
		printf("%-3d    ", st[i]);
		printf("%c    ", st[i]);
		printf("%p\n", &st[i]);
	}

	for(p = st; *p; ){
		p = strchr(p, 'a');
		if(p != NULL){
			printf("%p ", p);
			p++;
		}
	}
	printf("\n");
}

猜你喜欢

转载自blog.csdn.net/weixin_42072280/article/details/84480781