字符串函数strlen()、strcpy()、strcat()、strcmp()解析

字符串函数

所在头文件:#include "string.h"

字符串长度函数strlen()

  • 格式:strlen(字符数组)
  • 功能:计算字符串长度
  • 返回值:返回字符串实际长度,不包括'\0'在内
  • \xhh表示十六进制数代表的符号
  • \ddd表示八进制数代表的符号

#include<stdio.h>
#include<string.h>
int main(void)
{  
    char s0[10] = {'A','\0','B','\0','C'};
    char s1[] = "\t\v\\\0will\n";
    char s2[] = "\x69\141\n";
    printf("%ld\t%ld\t%ld\n",strlen(s0),strlen(s1),strlen(s2));
    return 0;   
}

运行结果:

1   3   3
  • 对于s0字符串,遇到'\0'就结束。
  • 对于s1字符串,'\t'表示一个字符,一直到'\0'结束。
  • 对于s2字符串,\x后两位表示十六进制数,\后边三个数字表示八进制数,'\n'表示一个字符。

字符串拷贝函数strcpy

  • 格式:strcpy(字符数组1,字符串2)
  • 功能:
  • 将字符串2拷贝到字符数组1中
  • 返回值:返回字符数组1的首地址
  • 说明:
    • 字符数组1必须足够大
    • 拷贝时'\0'一同拷贝
#include<stdio.h>
#include<string.h>
int main(void)
{  
    char src[10] = "hello world";
    char dest[20];
    strcpy(dest,src);
    puts(src);
    puts(dest);
    return 0;   
}

运行结果:

hello world
hello world

字符串连接函数strcat()

  • 格式:strcat(字符数组1,字符数组2)
  • 功能:把字符数组2连到字符数组1后边
  • 返回值:返回字符数组1的首地址
  • 说明:
    • 字符数组1必须足够大
    • 连接前,两串均以'\0'结束,连接后,串1的'\0'取消,新串最后加'\0'
#include<stdio.h>
#include<string.h>
int main(void)
{  
    char src[50] = "hello world";
    char dest[20] = "你好世界";
    strcat(src,dest);
    puts(src);
    return 0;   
}

运行结果:

hello world你好世界

字符串比较函数strcmp()

  • 格式:strcmp(字符串1,字符串2)
  • 功能:比较两个字符串
  • 比较规则:对两串从左到右逐个字符比较(ASCII码),直到遇到不同字符或''\0'为止
  • 返回值:返回int型整数
    • 若字符串1 < 字符串2,返回负整数
    • 若字符串1 > 字符串2,返回正整数
    • 若字符串1 = 字符串2,返回0
#include<stdio.h>
#include<string.h>
int main(void)
{  
    char s0[20] = "hello world";
    char s1[20] = "hello world!";
    char s2[20] = "hello";
    char s3[20] = "hello world";
    printf("%d\n",strcmp(s0,s1));
    printf("%d\n",strcmp(s0,s2));
    printf("%d\n",strcmp(s0,s3));
    return 0;   
}

运行结果:

-33
32
0

字符串函数的拓展

  • strncpy(p,p1,n)复制指定长度的字符串,把p1字符串前n个字符替换p字符串的前n个字符
  • strncat(p,p1,n)附加指定长度的字符串,把p1前n个字符连接到p字符串后边
  • strcasecmp()忽略大小写比较字符串
  • strncmp(p,p1,n)比较指定长度的字符串
  • strchr(p,c)在字符串中查找指定字符
  • strstr(p,p1)查找字符串
  • strnlen()

例strncpy(p.p1,n)

#include<stdio.h>
#include<string.h>
int main(void)
{  
    char s0[20] = "hello world";
    char s1[20] = "china";
    strncpy(s1,s0,4);
    puts(s0);
    puts(s1);
    return 0;   
}

运行结果:

hello world
hella

例strchr(p,c)

#include<stdio.h>
#include<string.h>
int main(void)
{  
    char ch = 'l';
    char s0[] = "hello world";
    printf("%p,%p\n",s0,strchr(s0,ch));//strnchr函数返回值是查找的字符串中第一次出现字符的地址
    printf("%p,%p\n",s0,strrchr(s0,ch));//strnchr函数返回值是查找的字符串中第一次出现字符的地址
    printf("%ld\n",strchr(s0,ch)-s0);//strnchr函数返回值是查找的字符串中第一次出现字符的下标
    printf("%ld\n",strrchr(s0,ch)-s0);//strnchr函数返回值是查找的字符串中最后一次出现字符的下标
    return 0;   
}

运行结果:程序运行环境为linux环境

0x7ffc59d1c95c,0x7ffc59d1c95e
0x7ffc59d1c95c,0x7ffc59d1c965
2
9

例strstr(p,p1)

#include<stdio.h>
#include<string.h>
int main(void)
{  
    char str0[]= "good morning";
    char str1[] = "morning";
    /*在字符串str0中查找str1字符串并返回str1字符串在str0中出现的位置*/
    printf("%ld\n",strstr(str0,tr1)-str0);
    return 0;   
}

运行结果:

5

其他不常见的字符串函数

  • isalpha()检查是否为字母字符
  • isupper()检查是否为大写字母字符
  • iskower()检查是否为小写字母
  • isdigit()检查是否为数字

这些函数需要包含#include<ctype.h>

例:

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
int main(void)
{  
    int ch;
    puts("请输入字母或十以内的数字!按*键退出\n");
    while((ch = getchar()) != EOF)
    {
    	if(ch == '*')
    	{	break;
    	}
        if(isalpha(ch))
        {
            if(isupper(ch))
            {
                puts("是大写字母!");
                putchar(ch);
                putchar('\n');
            }
            else
            {
                puts("是小写字母!");
                putchar(ch);
                putchar('\n');
            }
        }
        else
        {
            if(isdigit(ch))
            {
                puts("是数字!");
                printf("%c\n",ch);
            }
        }
    }
    return 0;   
}

运行结果:

输入数字时判别为输入的是数字,输入大写字母时判别为是大写字母,输入小写字母时判别为是小写字母,当输入字符'*'时退出循环。

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值