C语言的字符串和字符串函数

本文介绍了C语言中字符串的基本概念和常用函数,如strlen用于计算字符串长度,strcat和strncat用于字符串拼接,strcmp和strncmp进行字符串比较,strcpy和strncpy用于字符串复制,以及strchr、strpbrk、strrchr和strstr等其他功能的字符串函数。
摘要由CSDN通过智能技术生成

C语言的字符串和字符串函数

1.C语言的字符串

  • char[100]=“woyidingnengc”;///这是一种创建方法;
  • char[10]={‘a’,‘b’,‘c’,‘\0’};///'\0’代表这是一个字符串;

2.字符串函数

1.strlen()

  • sizeof()运算符是以字节为单位给出对象的大小。

  • strlen()函数给出字符串中的字符长度。都在string.h头文件中

2.strcat

strcat()(用于拼接字符串)函数接受两个字符串作为参数。该函数把第 2个字符串的备份附加在第1个字符串末尾,并把拼接后形成的新字符串作为 第1个字符串,第2个字符串不变。strcat()函数的类型是char *(即,指向char 的指针)。strcat()函数返回第1个参数,即拼接第2个字符串后的第1个字符 串的地址。

strncat()作用和strcat一样,但接受三个参数,前俩个参数和strcat一样,第三个参数为int类型的变量,用来指定拼接到第一个字符串上的字符数量;

3.strcmp

字符串比较函数,接受两个指针指向字符串,从第一个字符开始比较,直到比较的不同的字符后返回一个值。strcmp()函数比较的是字符串,不是整个数组。

///strcmp的返回值;
strcmp("A", "A") 返回 0
strcmp("A", "B") 返回 -1
strcmp("B", "A") 返回 1
strcmp("C", "A") 返回 1
strcmp("Z", "a") 返回 -1
strcmp("apples", "apple") 返回 1
通过比较得:

大多数情况下,strcmp()返回的具体值并不重要,我们只在意该值是0还 是非0(即,比较的两个字符串是否相等)。或者按字母排序字符串,在这种情况下,需要知道比较的结果是为正、为负还是为0。

注意 ,strcmp()函数比较的是字符串,不是字符,所以其参数应该是字符串 (如"apples"和"A"),而不是字符(如’A’)。但是,char 类型实际上是整数 类型,所以可以使用关系运算符(>,<,=)来比较字符。

strncmp()函数接受三个参数,第三个参数可以指定查找的字符数。下面代码展示了是用法。

#include <stdio.h>
#include <string.h>
#define LISTSIZE 6
int main()
{
    const char * list[LISTSIZE] =
    {
        "astronomy", "astounding",
        "astrophysics", "ostracize",
        "asterism", "astrophobia"
    };
    int count = 0;
    int i;
	for (i = 0; i < LISTSIZE; i++)
		if (strncmp(list[i], "astro", 5) == 0)//此处指明只比较前5个字符
        {
            printf("Found: %s\n", list[i]);
            count++;
        }
	printf("The list contained %d words beginning"
			" with astro.\n", count);
	return 0;
}
下面是该程序的输出:
Found: astronomy
Found: astrophysics
Found: astrophobia

4.strcpy

函数接受传入两个指针地址;

程序调用strcpy()把整个字符串从临时数组拷贝至目标数组中。 strcpy()函数相当于字符串赋值运算符。

strcpy()函数还有两个有用的属性。第一,strcpy()的返回类型是 char *, 该函数返回的是第 1个参数的值,即一个字符的地址。第二,第 1 个参数不 必指向数组的开始。这个属性可用于拷贝数组的一部分,即把第二个参数指向的字符串拷贝在第一个参数指向的地址,替换地址后面的字符串。

更谨慎的选择:strncpy()

拷贝字符串用 strncpy()更安全,该函数的第 3 个参数指明可拷贝的最大字符数,避免出现第一个字符串的空间不足以容纳第二个字符串的情况。

使用strncpy时加入这两句
strncpy(qwords[i], temp, TARGSIZE - 1);
qwords[i][TARGSIZE - 1] = '\0'; 

这样做确保储存的是一个字符串。如果目标空间能容纳源字符串的副 本,那么从源字符串拷贝的空字符便是该副本的结尾;如果目标空间装不下 副本,则把副本最后一个元素设置为空字符。

其他字符串函数

ANSI C库有20多个用于处理字符串的函数,下面总结了一些常用的函数。

char *strcpy(char * restrict s1, const char * restrict s2);

该函数把s2指向的字符串(包括空字符)拷贝至s1指向的位置,返回值是s1。

char *strncpy(char * restrict s1, const char * restrict s2, size_t n);

该函数把s2指向的字符串拷贝至s1指向的位置,拷贝的字符数不超过 n,其返回值是s1。该函数不会拷贝空字符后面的字符,如果源字符串的字 符少于n个,目标字符串就以拷贝的空字符结尾;如果源字符串有n个或超过 n个字符,就不拷贝空字符。

char *strncat(char * restrict s1, const char * restrict s2, size_t n);

该函数把s2字符串中的n个字符拷贝至s1字符串末尾。s2字符串的第1个 字符将覆盖s1字符串末尾的空字符。不会拷贝s2字符串中空字符和其后的字 符,并在拷贝字符的末尾添加一个空字符。该函数返回s1。

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

如果s1字符串在机器排序序列中位于s2字符串的后面,该函数返回一个 正数;如果两个字符串相等,则返回0;如果s1字符串在机器排序序列中位 于s2字符串的前面,则返回一个负数。

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

该函数的作用和strcmp()类似,不同的是,该函数在比较n个字符后或遇 到第1个空字符时停止比较。

char *strchr(const char * s, int c);

如果s字符串中包含c字符,该函数返回指向s字符串首位置的指针(末尾的空字符也是字符串的一部分,所以在查找范围内);如果在字符串s中未找到c字符,该函数则返回空指针。

char *strpbrk(const char * s1, const char * s2);

如果 s1 字符中包含 s2 字符 串中的任意字符,该函数返回指向 s1 字符串首位置的指针;如果在s1字符 串中未找到任何s2字符串中的字符,则返回空字符。

char *strrchr(const char * s, int c);

该函数返回s字符串中c字符的最后一次 出现的位置(末尾的空字符也是字符串的一部分,所以在查找范围内)。如 果未找到c字符,则返回空指针。

char *strstr(const char * s1, const char * s2);

该函数返回指向s1字符串中s2字符串出现的首位置。如果在s1中没有找 到s2,则返回空指针。

size_t strlen(const char * s);

该函数返回s字符串中的字符数,不包括末尾的空字符。

char *strcpy(char * restrict s1, const char * restrict s2);
///有const不会改变字符串

表明不能更改s2指向的字符串,至少不能在strcpy()函数中更改。但是可 以更改s1指向的字符串。这样做很合理,因为s1是目标字符串,要改变,而 s2是源字符串,不能更改。

目前总结出这么多,日后有改动再补充;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值