1.strlen
得到字符串长度,不包括空字符
- #include<stdio.h>
- void fit(char *string,int n);
- int main(void){
- char mesg[] = "Hold on to your hats,hakers";
- puts(mesg);
- fit(mesg,7);
- puts(mesg);
- puts(mesg+8);
- return 0;
- }
- void fit(char *string,int n){
- if(strlen(string)>n){//当字符串长度大于n时,我们可以截断该字符串,截断方法是在想截断的位置插入空字符
- string[n] = '\0';
- }
- }
2.strcat
将第二个参数添加到第一个参数末尾,第二个参数不变,返回第一个参数
不检查大小会发生溢出
第一个参数原先的空字符将被覆盖
- #include<stdio.h>
- #define SIZE 80
- int main(void){
- char flower[SIZE];
- char *add = "s smell like old shoe";
- puts("Enter flower:");
- gets(flower);
- strcat(flower,add);//将第二个参数添加到第一个参数结尾
- puts(flower);
- puts(add);//第二个参数不变
- return 0;
- }
3.strncat
第三个参数指定添加的字符数,注意要计算空字符!
- #include<stdio.h>
- #include<string.h>
- #define SIZE 30
- #define BUGSIZE 13
- int main(void){
- char flower[SIZE];
- char addon[] = "s smell like old shoe";
- char bug[BUGSIZE];
- int available;
- puts("Enter flower:");
- gets(flower);
- if((strlen(flower)+strlen(addon)+1) <= SIZE){//判断空间是否可以容纳!
- strcat(flower,addon);
- }
- else{
- puts("No spaces of flower!");
- }
- puts(flower);
- puts("Enter bug");
- gets(bug);
- available = BUGSIZE - strlen(bug) - 1;//计算字符串还可以容纳多少空间
- strncat(bug,addon,available);
- puts(bug);
- return 0;
- }
4.strcmp
字符串本质上是指针,因此比较字符串如果使用比较运算符,并不检查两个字符串是否相等,而是检查这两个字符串的地址是否一样,这是不可能一样的。我们需要一个比较字符串内容而不是字符串地址的函数
- #include<stdio.h>
- #include<string.h>
- #define ANSWER "Grant"
- #define MAX 40
- int main(void){
- char try[MAX];
- puts("Who is buried in Grant's tomb?");
- gets(try);
- while(strcmp(try,ANSWER)){
- puts("try again");
- gets(try);//空间不会被耗尽,因为gets每次都是从空间的开头开始写起
- }
- return 0;
- }
相等返回0,第一个字符先于第二个返回-1,第一个字符后于第二个返回1。比较根据ASCII码,大写排在小写前面
5.strncmp
第三个参数用来指定比较的字符数
主要应用于搜索“指定字符”开头的字符串
- #include<stdio.h>
- #include<string.h>
- #define LENGTH 5
- int main(void){
- char *string[LENGTH] = {"sunshine","flower","sunboy","grass","morning"};
- char *search = "sun";
- int count = 0;
- int index;
- for(index=0;index<LENGTH;index++){
- if(strncmp(search,string[index],3) == 0){
- printf("%s\n",string[index]);
- count++;
- }
- }
- printf("%d",count);
- return 0;
- }
6.strcpy
- #include<stdio.h>
- #include<string.h>
- #define LIM 5
- #define SIZE 40
- int main(void){
- char qwords[LIM][SIZE];
- char temp[SIZE];
- int i = 0;
- printf("Enter %d words\n",SIZE);
- while(i<LIM && gets(temp)){
- if(temp[0] != 'q'){//也可以使用strncmp(temp,"q",1)来判断
- printf("%s doesn't begin with q!\n",temp);
- }
- else{
- strcpy(qwords[i],temp);
- i++;
- }
- }
- puts("Here are the words accepted.");
- for(i=0;i<LIM;i++){
- puts(qwords[i]);
- }
- return 0;
- }
strcpy返回第一个参数的地址,且第一个参数位置不一定必须是数组的起始位置
- #include<stdio.h>
- #include<string.h>
- #define WORDS "beast"
- #define SIZE 40
- int main(void){
- char *orig = WORDS;
- char copy[SIZE] = "Be the best that you can be.";
- char *ps;
- puts(orig);
- puts(copy);
- ps = strcpy(copy+7,orig);//拷贝到第七个位置
- puts(copy);
- puts(ps);
- return 0;
- }
7.strncpy
第三个参数指明最大可复制的字符数,有时候需要我们自己再将标识结尾的空字符添加到字符串中!
- #include<string.h>
- #define LIM 5
- #define TARGSIZE 7
- #define SIZE 40
- int main(void){
- char qwords[LIM][TARGSIZE];
- char temp[SIZE];
- int i = 0;
- while(i<LIM && gets(temp)){
- if(temp[0] != 'q'){
- printf("try again!");
- }
- else{
- strncpy(qwords[i],temp,TARGSIZE-1);//最多能复制6个
- qwords[i][TARGSIZE-1] = '\0';//将最后的空字符添加进去
- i++;
- }
- }
- puts("Here is the inputs");
- for(i=0;i<LIM;i++){
- puts(qwords[i]);
- }
- return 0;
- }
8.sprintf
与printf相似,只是它写道字符串而不是屏幕上。可以用于合成。
- #include<stdio.h>
- #define MAX 20
- int main(void){
- char first[MAX];
- char last[MAX];
- char formal[MAX*2+10];
- double prize;
- puts("Enter your firstname:");
- gets(first);
- puts("Enter your lastname:");
- gets(last);
- puts("Enter your prize money");
- scanf("%lf",&prize);
- sprintf(formal,"%s,%-19s:$%6.2f\n",first,last,prize);//组合在一起了!
- puts(formal);
- return 0;
- }
9.常用总结