C语言——字符函数和字符串函数_学习笔记

关于一些字符串函数的模拟实现,欢迎浏览文章C语言——一些字符串函数的模拟实现

一、字符函数

1.1 字符分类函数

C语言中有一系列的函数是专门做字符分类的,也就是一个字符是属于什么类型的字符的。这些函数的使用都需要包含一个头文件是<ctype.h>

常见的字符分类函数介绍

函数如果他的参数符合下列条件就返回真
iscntrl任何控制字符
isspace空白字符:空格‘ ’,换页‘\f,换行’\n’,回车‘\r’,制表符’\t’或者垂直制表符’\v’
isdigit十进制数字0~9
isxdigit十六进制数字,包括所有十进制数字,小写字母a~ f,大写字母A~ F
islower小写字母a~z
isupper大写字母A~Z
isalpha字母a~ z和字母A~ Z
isalnum字母或者数字,a~ z, A~ Z,0~9
ispunct标点符号,任何可打印的,不属于数字或字母的图形字符
isgraph任何图形字符
isprint任何可打印字符,包括图形字符和空白字符

应用举例

这些函数的使用方法非常类似,我们用 iscntrl 举例,其他的非常类似:

#include <stdio.h>
#include <ctype.h>
int main ()
{
  int i=0;
  char str[]="first line \n second line \n";
  while (!iscntrl(str[i]))
  {
    putchar (str[i]);
    i++;
  }
  return 0;
}
  1. 在C语言中,一个"!“符号表示逻辑非操作。当它后面跟着一个布尔表达式时,它将其取反。例如,如果表达式的结果为true,则”!"操作符将其转换为false,反之亦然。
  2. iscntrl 函数遇到任何控制字符的结果返回为真。(\n是一个控制字符)

上面代码的意思是,遍历输出字符串数组str[],遇到控制字符停止输出
输出结果为:

first line 

1.2 字符转换函数

函数介绍

C语言提供了2个字符转换函数:

函数名函数作用
tolower将传入参数中的小写字母转为大写字母
toupper将传入参数中的大写字母转为小写字母

如果不使用库函数,我们将小写字母转大写字母,是小写字母进行-32得到的结果;大写转小写就是+32的结果。但是有了库函数,就可以直接使用库函数,方便快捷高效。

toupper 函数举例

void toUpperCase(char* str) 
{
    for (int i = 0; str[i] != '\0'; i++) 
    {
        str[i] = toupper(str[i]);
    }
}

int main() 
{
    char str[] = "Hello, world!";
    printf("原字符: %s\n", str);
    toUpperCase(str);
    printf("转换后: %s\n", str);
    return 0;
}

输出结果如下:
在这里插入图片描述

二、字符串函数

使用字符串函数要注意包含<string.h>头文件

关于一些字符串函数的模拟实现,欢迎浏览文章C语言——一些字符串函数的模拟实现

2.1 常用的字符串函数介绍

函数函数作用
strlen(a)用于计算字符串a的长度的函数,返回值为size_t类型的数字,头文件<string.h>
strcpy(a,b)用于复制源字符串b, 到目标字符串a, 连 \0 字符一起拷贝,返回值为字符串a首元素的地址,头文件<string.h>
strcat(a,b)将源字符串 b 的内容连接到目标字符串 a 的末尾,并在结果字符串的末尾添加结束符\0。返回值为字符串a首元素的地址,头文件<string.h>
strcmp(a,b)比较a和b两个字符串,如果两个字符串完全相同,函数返回0;如果第一个参数str1中的字符串在字典顺序上位于第二个参数str2中的字符串之前,函数返回一个负整数。如果str1中的字符串在字典顺序上位于str2中的字符串之后,函数返回一个正整数。
strncpy(str1,str2,n)用于复制源字符串str2的前n个字符到目标字符串str1中,返回值为字符串str1首元素的地址。头文件<string.h>
strncat(str1,str2,n)用于将源字符串str2的前n个字符追加到目标字符串str1的末尾,返回值为字符串str1首元素的地址。头文件<string.h>
strncmp(str1,str2,n)函数按照字典顺序逐个比较两个字符串的前n个字符,直到遇到不匹配的字符或到达字符串的末尾。如果两个字符串的前n个字符完全相同,函数返回0。如果第一个参数str1中的字符串在前n个字符的字典顺序上位于第二个参数str2中的字符串之前,函数返回一个负整数。如果str1中的字符串在前n个字符的字典顺序上位于str2中的字符串之后,函数返回一个正整数。头文件<string.h>
strstr(str1,str2)是在str1字符串中查找str2字符串的第一次出现。这个函数返回的是指向str1中第一次出现str2的位置的指针。如果str2没有在str1中出现过,那么函数将返回NULL。头文件<string.h>
strtok(str,delim)用于将一个字符串分割成一系列子字符串。函数会将str按照delim中的字符进行分割,并返回指向第一个子字符串的指针。每次调用strtok函数都会将指针移动到下一个子字符串,直到没有更多的子字符串为止。(在分割字符串时,strtok函数会忽略掉字符串中的前导和尾随空格。如果分隔符字符串为NULL,则默认使用空格作为分隔符。)头文件<string.h>

2.2 应用举例

① strlen

函数原型如下:

#include <string.h>

size_t strlen(const char *str);
  1. 这个函数接受一个指向字符串的指针作为参数,并返回该字符串的长度,不包括字符串末尾的空字符(‘\0’)。

  2. strlen函数使用指针来遍历字符串中的每个字符,直到遇到空字符为止,它计算遍历过的字符数并返回结果。

以下是一个使用strlen函数的示例:

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

int main() {
    char str[] = "Hello, world!";
    printf("Length of string: %zu\n", strlen(str));
    return 0;
}

在这个示例中,strlen函数计算字符串str的长度并使用printf函数输出结果。注意,我们使用了%zu格式说明符来输出strlen函数的返回值,因为它的返回类型是size_t。

输出结果为:

在这里插入图片描述

② strcpy

函数原型如下:

#include <string.h>

char *strcpy(char *dest, const char *src);
  1. dest是目标字符串的指针,src是源字符串的指针。

  2. strcpy函数将源字符串复制到目标字符串中,包括终止符\0。它返回指向目标字符串的指针。

以下是一个使用strcpy函数的示例:

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

int main() {
    char src[30] = "Hello, world!";
    char dest[30];

    strcpy(dest, src);
    printf("Source string: %s\n", src);
    printf("Destination string: %s\n", dest);

    return 0;
}

在这个示例中,strcpy函数将src中的字符串复制到dest中,然后通过printf函数输出两个字符串。

输出结果如下:
在这里插入图片描述

③ strcat

函数原型如下:

#include <string.h>

char *strcat(char *dest, const char *src);
  1. 其中,dest是目标字符串的指针,src是要连接的源字符串的指针。

  2. strcat函数将源字符串追加到目标字符串的末尾,并在结果字符串的末尾添加一个终止符\0。它返回指向目标字符串的指针。

以下是一个使用strcat函数的示例:

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

int main() {
    char dest[30] = "Hello, ";
    char src[30] = "world!";

    strcat(dest, src);
    printf("Result string: %s\n", dest);

    return 0;
}

在这个示例中,strcat函数将src中的字符串追加到dest的末尾,然后通过printf函数输出结果字符串。

输出结果如下:
在这里插入图片描述

④ strcmp

函数原型如下:

#include <string.h>

int strcmp(const char *str1, const char *str2);
  1. 其中,str1和str2是两个要进行比较的字符串的指针。

  2. strcmp函数按字典顺序比较两个字符串,并返回它们的差值。如果两个字符串完全相同,则返回0;如果第一个字符串比第二个字符串小,则返回一个负数;如果第一个字符串比第二个字符串大,则返回一个正数。

以下是一个使用strcmp函数的示例:

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

int main() {
    char str1[] = "Hello";
    char str2[] = "hello";
    int result = strcmp(str1, str2);

    if (result == 0) {
        printf("Strings are equal.\n");
    } else if (result < 0) {
        printf("String 1 is less than string 2.\n");
    } else {
        printf("String 1 is greater than string 2.\n");
    }

    return 0;
}

在这个示例中,strcmp函数比较了str1和str2两个字符串,并根据比较结果输出相应的消息。

输出结果为:

在这里插入图片描述

⑤ strncpy

strncpy函数的原型:

char *strncpy(char *dest, const char *src, size_t n);

下面是一个使用strncpy函数的示例:

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

int main() {
    char dest[10] = "Hello";
    const char src[] = " World";
    strncpy(dest, src, 5);
    printf("%s\n", dest);  // 输出:Hello W
    return 0;
}

在这个示例中,我们有一个目标字符串"Hello"和一个源字符串" World"。我们使用strncpy函数将源字符串的前5个字符复制到目标字符串中,结果是"Hello W"。注意,因为目标数组只有10个空间,所以我们只复制了前5个字符,而不是整个源字符串。同时,因为我们没有为目标数组预留空间来添加空字符,所以最后的输出并没有自动添加空字符。

⑥ strncat

该函数的原型定义:

char *strncat(char *dest, const char *src, size_t n);

下面是一个使用strncat函数的示例:

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

int main() {
    char dest[10] = "Hello";
    const char src[] = " World";
    strncat(dest, src, 4);
    printf("%s\n", dest);  // 输出:Hello World
    return 0;
}

在这个示例中,我们有一个目标字符串"Hello"和一个源字符串" World"。我们使用strncat函数将源字符串的前4个字符追加到目标字符串的末尾,结果是"Hello World"。

⑦ strncmp

strncmp函数的原型定义:

int strncmp(const char *str1, const char *str2, size_t n);

下面是一个使用strncmp函数的示例:

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

int main() {
    const char str1[] = "Hello";
    const char str2[] = "Hell";
    int result = strncmp(str1, str2, 4);
    if (result < 0) {
        printf("%s is less than %s\n", str1, str2);
    } else if (result > 0) {
        printf("%s is greater than %s\n", str1, str2);
    } else {
        printf("%s is equal to %s\n", str1, str2);
    }
    return 0;
}

输出结果为:

在这里插入图片描述

⑧ strstr

strstr函数的原型是:

const char *strstr(const char *haystack, const char *needle);

以下是一个使用strstr函数的例子:

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

int main() {
    const char *haystack = "Hello, world!";
    const char *needle = "world";
    const char *result = strstr(haystack, needle);

    if (result) {
        printf("'%s' found in '%s' at position: %ld\n", needle, haystack, result - haystack);
    } else {
        printf("'%s' not found in '%s'\n", needle, haystack);
    }

    return 0;
}

这段代码会输出:“‘world’ found in ‘Hello, world!’ at position: 7”,因为“world”在“Hello, world!”中第一次出现的位置是从字符串的第七个字符开始的。

⑨ strtok

strtok函数的原型是:

char *strtok(char *str, const char *delim);

以下是一个使用strtok函数的例子:

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

int main() {
    char str[] = "Hello, World! How are you?";
    const char delim[] = " ,!";
    char *token;

    token = strtok(str, delim);
    while (token != NULL) {
        printf("%s\n", token);
        token = strtok(NULL, delim);
    }

    return 0;
}

这段代码会将字符串"Hello, World! How are you?"分割成多个子字符串,并输出每个子字符串。输出的结果将是:

Hello
World
How
are
you?

关于一些字符串函数的模拟实现,欢迎浏览文章C语言——一些字符串函数的模拟实现

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值