常用字符串函数总结---1

/*****************************************************************************************************/
常用字符串函数如下述脑图所述,若要了解string.h系列函数的完整列表,请查阅“新增C99和C11的标准ANSI C库”
/****************************************************************************************************/

【图片】

strlen()函数

下面展示一段测试fit()函数,注意使用了C字符常量的串联特性

#include <stdio.h>
#include <string.h>  /*内含字符串函数原型*/
void fit(char *,unsigned int);
int main (void){
    
    
    char mesg [] = "Things should be as simple as possible,""but not simper.";
    puts(mesg);
    fit(mesg,38);
    puts(mesg);
    puts("Let' LOOk at some more of the string");
    puts(mesg+30);
    return 520;
}
void fit(char *string,unsigned int size){
    
    
    if(strlen(string)>size)
        string[size]='\0';
}

输出结果如下

在这里插入图片描述fit()函数把第39个元素的逗号替换成’\0’字符,puts() 函数在空字符处停止输出,并忽略其余字符.
在这里插入图片描述

strcat()函数

由于前面的脑图已经阐述了本函数的用法,接下来我们直接上代码

#include "stdio.h"
#include "string.h"

#define size 80

int main(){
    
    
	char flower[size]="woaini";
	char addon[50]="lala semll like older";
	strcat(flower ,addon);
	puts(flower);
	puts(addon);
	
	return 520;
} 

结果如下
在这里插入图片描述
可见flower改变了,而addon保持不变.

但是如果flower数组的大小不够大呢?是不是又会出现问题?如果你有这种顾虑的话说明你已经不再是小白了。那就让我们接着往下看把!

strncat()函数

strcat()函数无法检查第一个数组能否容纳第二个字符串。

strncat(char *,char *,int)

第三个参数n表示将第二个字符串的内容附加给第一个字符串,直到第n个字符为止

#include "stdio.h"
#include "string.h"

#define size 80

int main(){
    
    
	char flower[size]="woaini";
	char addon[50]="lala semll like older";
	strncat(flower ,addon,10);
	puts(flower);
	puts(addon);
	
	return 520;
} 

执行结果

在这里插入图片描述

strcmp()函数

1.该函数用于字符串的比较

同时,值得一提的是该函数要比较的是字符串的内容,不是字符串的地址。读者可以自己设计一个函数,也可以使用C标准库中的strcmp()函数(用于字符串比较)。该函数通过比较运算符来比较字符串,就像比较数字一样。如果两个字符串参数相同,该函数就返回0,否则返回非零值。

#include "stdio.h"
#include "string.h"

#define size 80

int main(){
    
    
	char flower[size]="woaini";
	char addon[50]="woaini";
	char *a="wobuaini";
	printf("%d\n",strcmp(flower,addon));
	printf("%d\n",strcmp(flower,a));
	return 520;
} 

执行结果如下:
在这里插入图片描述
细心的小伙伴可能会问到,flower数组大小不是80个字符大小嘛?对此我们的回答是,strcmp()函数比较的只是字符串,而不是整个数组,这是一个非常好的功能。

2.strcmp()函数的返回值

#include "stdio.h"
#include "string.h"

int main(){
    
    
	printf("strcmp(\"A\",\"A\") is");
	printf("   %d\n",strcmp("A","A"));
	
	printf("strcmp(\"A\",\"B\") is");
	printf("   %d\n",strcmp("A","B"));
	
	printf("strcmp(\"B\",\"A\") is");
	printf("   %d\n",strcmp("B","A"));
	
	return 520;
} 

在这里插入图片描述
以上情况说明,字符串的比较是根据两个字符串第一个不一样的字符的ASCII码来决定输出值的,这有三种情况:

  • 两个字符串相等,返回0
  • 如果在字母表中第一个字符串位于第二个字符串前面,返回负数
  • 反之返回正数

strncmp()函数

strncmp()函数,顾名思义,又是对strcmp函数的扩展,strcmp()函数比较字符串中的字符,直到发现不同的字符为止,这一过程可能会持续到字符串的末尾。而strncmp ()函数在比较两个字符串时,可以比较到字符不同的地方,也可以只比较第3个参数指定的字符数。例如,要查找以"astro"开头的字符串,可以限定函数只查找这5个字符。

由于操作与strcmp()函数类似,就不展开实战。

strcpy()函数与strncpy()函数

strcpy()函数的使用只能实现,字符串的整串拷贝。

1.strcpy()的其他属性

  • strcpy()的返回类型是char*,该返回的是第一个参数的值,也就是第一个字符的地址
  • 第一个参数不必要指向数组的开始,这个属性可以用于拷贝数组的一部分
#include "stdio.h"
#include "string.h"
#define words "beast"
#define size 40

int main(){
    
    
	
	const char *orig=words;
	char copy[size]="be the best that you can";
	char *ps;
	
	puts(orig);
	puts(copy);
	ps=strcpy(copy+7,orig);
	puts(copy);
	puts(ps);
	
	return 520;
}

输出结果
在这里插入图片描述

大家可以看到,ps指针指向的值为beast,也就是第一个参数的地址,也就是copy+7。你get到了吗?如果不好理解,请看下图

在这里插入图片描述2.更谨慎的选择:strncpy()

strcpy()与strcat()都有着相同的问题,他们都不能检查目标空间是否能够容纳字符串的副本。因此,拷贝字符串用strncpy()更加安全。同样,该函数的第三个参数指明可以拷贝的最大字符数。

补充:sprintf()函数

首先要说明,sprintf()函数声明在stdio.h中,而不是string.h中。
接下来用一串代码来说明他的用法。

#include "stdio.h"
#include "string.h"
#define words "beast"
#define size 40

int main(){
    
    
	char formal[2*size+10];
	const char *orig=words;
	char copy[size]="be the best that you can";
	sprintf(formal,"  %-19s:  %6.2f\n",orig,copy);
	puts(formal);
	
	return 520;
}

执行结果

在这里插入图片描述
如果感觉对你有帮助,请点个赞留个言再走呗,谢谢亲。

猜你喜欢

转载自blog.csdn.net/qq_42392049/article/details/112667648