C语言字符串函数

文章详细介绍了C语言中几个重要的字符串处理函数,包括strstr()用于查找子串,strcat()用于连接字符串,strcpy()和strncpy()用于复制字符串,strcmp()进行字符串比较,以及strlen()计算字符串长度,还有strlwr()和strupr()用于字母大小写转换,以及strtoul()和strtol()将字符串转换为数字。这些函数在处理字符串时起到关键作用。
摘要由CSDN通过智能技术生成

1、strstr()函数是一个参数为两个字符指针类型,返回值是char*类型的函数。

        char* strstr(字符数组1,字符数组2)

用于找到子串(str2)在一个字符串(str1)中第一次出现的位置(不包括str2的串结束符),并返回该位置的指针,如果找不到,返回空指针(NULL)。

它包含在string.h头文件中。

实例:
查找子字符串成功后,用strncpy修改内存块内容。

(注意多个指针中的一个对地址实际保存的值做出改变,其他指针指向的值的变化。)

#include <stdio.h>
#include <string.h> 
#include<assert.h>


int main()
{
    char str[] = "This is a simple string hello world!";
    char* pch;
    pch = strstr(str, "string");
    if (pch != NULL)
    {
        printf("%s\n",str);
        printf("%s\n",pch);
        strncpy(pch, "sifang",6);
    }
    printf("%s\n",str);
    printf("%s\n",pch);
    return 0;
}

2、strcat函数——字符串连接函数。
一般形式:
strcat(字符数组1,字符数组2)
作用:把两个字符数组中的字符串连接起来,把字符串2,接到字符串1后面,结果放在字符数组1中,函数调用后返回字符数组1的地址

注意点:

(1)字符数组1必须足够大,以便容纳连接后的新字符串。因为允许数组2的sizeof空间大小大于数组1。
(2)连接前两个字符串后面都有’\0’,连接时将字符串1后面的’\0’取消,只在新串最后保留’\0’。 

3、strcpy和strncpy函数——字符串复制函数
一般形式:
strcpy(字符数组1,字符数组2);
作用:将字符串2复制到字符串1中去 。

注意点:

(1)“字符数组1”必须写成数组名形式(如str1),“字符串2”可以是字符数组名,也可以是一个字符串常量。

(2)如果复制前未对str1数组初始化或赋值,则str1各字节中的内容是无法预知的,复制时将str2中的字符串和其后面的’\0’一起复制到字符数组1中,取代字符数组1中的前面6个字符,最后4个字符并不一定是’\0’,而是str1中原有的最后4个字节的内容。

(3)不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。字符串和字符数组名是一个地址常量,它不能改变值,正如数值型数组不能被赋值一样。如下面语句都是不合法的:        str1="China";和str1=str2;        只能用strcpy函数将一个字符串复制到另一个字符数组中去。用赋值语句只能将一个字符赋值给一个字符型变量或者字符数组元素。

(4)可以用strncpy函数将字符串2中前面n个字符复制到字符数组1中去。例如

        strncpy(str2, str1, 2)

4、strcmp函数——字符串比较函数
一般形式:
strcmp(字符串1,字符串2)


字符串比较的规则是:将两个字符串自左向右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或者遇到’\0’为止(遇到"\0",比较完结束符才停止)。
(1)如全部字符相同,则认为两个字符串相等;
(2)若出现不同的字符,则以第一对不同的字符的比较结果为准。例如
“A”<“B”,“a”>“A”,“computer”>“compare”,“these”>“that”,“1A”>“$20”,“CHINA”>“CANADA”,“DOG”>“cat”,“Tsinghua”>“TSINGHUA”
说明:在英文字典中位置在后面的为“大”,但要注意小写字母比大写字母大。
比较的结果由函数值带回:
(1)如果字符串1与字符串2相同,则函数值为0。
(2)如果字符串1>字符串2,则函数值为一个正整数。
(3)如果字符串1<字符串2,则函数值为一个负整数。
注意:字符串比较不能用以下形式:

字符串比较不能这样: str1>atr2
因为str1和str2代表地址而不代表数组中的全部元素,而只能用:strcmp(str1,str2)>0

int strcasecmp(const char *s1, const char *s2);

int strncasecmp(const char *s1, const char *s2, size_t n);

strcmp函数相似,但这两个函数忽略大小写('a' == 'A')

5、strlen函数——测字符串长度的函数
一般形式:
strlen(字符数组)
作用:测试字符串长度,函数的值为字符串中的实际长度,不包括'\0'。运算符sizeof()包括'\0'

6、strlwr函数——转换为小写的函数
一般形式:
strlwr(字符串)
作用:将字符串中的大写字母换成小写字母。

7、strupr函数——转换为大写的函数
一般形式:
strupr(字符串)
作用:将字符串中的小写字母换成大写字母。
 

8、strtoul函数——把输入的字符串转换成数字(unsined long int)


原型:unsigned long int strtoul(const char *nptr, char **endptr, int base);
        1、参数nptr:字符串的起始地址。
        2、参数endptr: 返回字符串有效数字的结尾地址。如 123456fe789 则返回数字f的地址。
        3、参数base:转化基数:参数 base 范围从2 至36,或0。参数 base 代表 nptr 采用的进制方式,如 base 值为10 则 采用10 进制,若 base 值为16 则采用16 进制数等。若采用2进制遇到数值>=2则结束转换

         strtoul() 会扫描参数nptr 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('\0')结束转换,并将结果返回。


 1、当 base 的值为 0 时,默认采用 10 进制转换,但如果遇到 '0x' / '0X' 前置字符则会使用 16 进制转换,遇到 '0' 前置字符则会使用 8 进制转换。
2、若 endptr 不为NULL,则会将遇到的不符合条件而终止的字符指针由 endptr 传回;若 endptr 为 NULL,则表示该参数无效,或不使用该参数。本文最后的范例没有展示 endptr 参数的使用,你可以参考 strtol() 函数的范例来更加直观地了解 endptr 参数。

9、strtol函数——把输入的字符串转换成数字(long int)
10、atoi函数——把输入的字符串转换成数字(int)
 

11、strdup函数——将字符串复制到新建立的空间

原型:char *strdup(const char *str)
该函数会先用malloc()配置与参数str字符串相同的空间大小,然后将参数str字符串的内容复制到该内存地址,然后把该地址返回。该地址最后可以利用free()来释放。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值