/*****************************************************************************************************/
常用字符串函数如下述脑图所述,若要了解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;
}
执行结果
如果感觉对你有帮助,请点个赞留个言再走呗,谢谢亲。