关于机器学习:c语言字符串常见函数-上

48次阅读

共计 6668 个字符,预计需要花费 17 分钟才能阅读完成。

🎈个人主页:[甘甜的江]
🎉欢送 👍点赞✍评论⭐珍藏
🤗收录专栏:[c 语言]
🤝心愿本文对您有所裨益,如有不足之处,欢送在评论区提出斧正,让咱们独特学习、交换提高!

引言:

在 C 语言中,字符串是一种常见的数据类型,用于存储文本信息。字符串的解决是编程中常见工作之一,而 C 语言提供了丰盛的字符串处理函数来不便开发者对字符串进行操作。

本篇博客将深入探讨 C 语言中字符串的基本概念以及常见的字符串处理函数,旨在帮忙读者更好地了解和利用这些功能强大的工具。

一、字符串的基本概念

在 C 语言中,字符串是一串字符的序列,用于示意文本数据。

字符串在 C 语言中以字符数组的模式示意,字符数组中的每个元素存储一个字符,并且以空字符 (‘\0’) 结尾,示意字符串的完结。

在 C 语言中,能够应用字符数组来示意字符串,例如:

char str[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

下面的示例定义了一个蕴含 5 个字符的字符数组,用于示意字符串 ”Hello”。

数组的最初一个元素是空字符(‘\0’),它示意字符串的完结。空字符是 C 语言中字符串的特殊字符,用于标识字符串的结尾。

另一种示意字符串的形式是应用双引号 (“”) 括起来的字符序列。

例如:

char str[] = "Hello";

在这种状况下,编译器会主动在字符串的开端增加一个空字符(‘\0’),因而不须要显式地指定数组的大小。

无论应用哪种形式示意字符串,在 C 语言中,字符串都是以字符数组的模式存储,以空字符 (‘\0’) 结尾,以便于程序可能确定字符串的完结地位。

这种以空字符结尾的示意形式被称为“以 null 结尾的字符数组”。

想要对字符串有更深刻的理解能够看我写的这篇博客

字符串概念详解

二、字符串处理函数概述

在 C 语言中,有许多常见的字符串处理函数可用于对字符串进行各种操作。

以下是一些常见的字符串处理函数及其性能和用处的简要概述:

1 strcpy():

性能:用于将一个字符串复制到另一个字符串中。

用处:罕用于字符串的赋值和拷贝操作。

2 strncpy():

性能:将指定长度的一个字符串复制到另一个字符串中。

用处:与 strcpy()相似,但能够指定要复制的字符数,防止溢出。

3 strcat():

性能:将一个字符串连贯到另一个字符串的开端。

用处:用于字符串的拼接操作,将两个字符串合并成一个字符串。

4 strncat():

性能:将指定长度的一个字符串连贯到另一个字符串的开端。

用处:与 strcat()相似,但能够指定要连贯的字符数,防止溢出。

5 strcmp():

性能:比拟两个字符串是否相等。

用处:用于字符串的比拟操作,判断两个字符串是否雷同。

6 strncmp():

性能:比拟两个字符串的前 n 个字符是否相等。

用处:与 strcmp()相似,但能够指定要比拟的字符数。

7 strlen():

性能:计算字符串的长度,即字符串中的字符数(不包含结尾的空字符)。

用处:罕用于确定字符串的长度,例如在循环中遍历字符串或为动静分配内存做筹备。

8 strchr():

性能:在字符串中查找指定字符的第一次呈现地位。

用处:用于查找字符串中特定字符的地位。

9 strrchr():

性能:在字符串中查找指定字符的最初一次呈现地位。

用处:与 strchr()相似,但从字符串的开端开始搜寻。

10 strstr():

性能:在字符串中查找指定子串的第一次呈现地位。

用处:用于在字符串中查找子串,返回子串在字符串中的地位。

这些函数是 C 语言中常见的字符串处理函数,它们提供了各种性能,能够用于对字符串进行复制、连贯、比拟、查找等操作。通过正当应用这些函数,能够不便地解决字符串数据,实现各种字符串操作需要。

三、字符串赋值和拷贝函数

3.1 strcpy (String Copy)

用法:

char* strcpy(char* destination, const char* source);

性能:

将源字符串的内容复制到指标字符串中,直到遇到源字符串的空字符(‘\0’)。

示例:

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

int main() {char source[] = "Hello, World!";
    char destination[20];

    strcpy(destination, source);

    printf("Copied string: %s\n", destination);
    return 0;
}

后果:

Copied string: Hello, World!

代码剖析:

这段 C 代码首先蕴含了规范输入输出库 <stdio.h> 和字符串解决库 <string.h>。

在 main 函数中,一个名为 source 的字符数组被初始化为 “Hello, World!”,并且另一个字符数组 destination 被定义为包容至少 20 个字符的空间。

而后,strcpy 函数被调用,将 source 中的字符串复制到 destination 中。因为 destination 的大小为 20,足够包容源字符串,因而这个操作是平安的。

最初,应用 printf 打印出复制后的字符串,即 “Hello, World!”,并且程序返回 0,示意失常执行完结。

须要留神的是,destination 中的内容当初与 source 完全相同,但这种操作的安全性取决于指标数组足够大,以包容源字符串的长度。

注意事项:

须要确保指标字符串足够大,以包容源字符串的内容。

不提供指标字符串长度的选项,容易导致缓冲区溢出。

3.2 strncpy (String Copy with Size Limit)

用法:

char* strncpy(char* destination, const char* source, size_t n);

性能:

将源字符串的最多前 n 个字符复制到指标字符串中,遇到源字符串的空字符 (‘\0’) 或者达到 n 时进行。

示例:

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

int main() {char source[] = "Hello, World!";
    char destination[10];

    strncpy(destination, source, 5);
    destination[5] = '\0';  // Ensure null-termination

    printf("Copied string: %s\n", destination);
    return 0;
}

后果:

Copied string: Hello

代码剖析:

代码首先定义了两个字符数组,source 用于存储源字符串 “Hello, World!”,而 destination 则是用于存储复制后的局部字符串的指标数组。

而后,应用 strncpy 函数将源字符串的前 5 个字符复制到指标数组 destination 中,因而 destination 中存储的是 “Hello”。

为了确保指标数组被正确视为字符串,手动在指标数组的第 6 个地位增加了字符串结束符 \0。

最初,通过 printf 函数将复制后的字符串打印输出,程序失常完结。

注意事项:

须要手动确保指标字符串以空字符 (‘\0’) 结尾。

如果源字符串长度小于 n,指标字符串将用空字符 (‘\0’) 填充。

对于这两个函数的具体区别,能够看我上面的这篇博客。

【c 语言】strcpy()和 strncpy():字符串复制详解

3.3 strcat (String Concatenate)

用法:

char* strcat(char* destination, const char* source);

性能:

将源字符串连贯到指标字符串的开端,造成一个新的字符串。

示例:

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

int main() {char destination[20] = "Hello,";
    char source[] = "World!";

    strcat(destination, source);

    printf("Concatenated string: %s\n", destination);
    return 0;
}

后果:

Concatenated string: Hello, World!

代码剖析:

首先定义了一个字符数组 destination,并初始化为 “Hello, ” 这个字符串,长度为 20。

而后定义了另一个字符数组 source,并将其初始化为 “World!”。

接着,应用 strcat 函数将 source 中的字符串连贯到 destination 的开端,因而 destination 最终存储的是 “Hello, World!”。

最初,通过 printf 函数将连贯后的字符串打印输出,程序返回 0 示意失常执行完结。

注意事项:

指标字符串必须足够大,以包容两个字符串的组合。

源字符串的内容将附加到指标字符串的结尾。

3.4. strncat (String Concatenate with Size Limit)

用法:

char* strncat(char* destination, const char* source, size_t n);

性能:

将源字符串的最多前 n 个字符连贯到指标字符串的开端。

示例:

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

int main() {char destination[20] = "Hello,";
    char source[] = "World!";

    strncat(destination, source, 3);

    printf("Concatenated string: %s\n", destination);
    return 0;
}

后果:

Concatenated string: Hello, Wor

代码剖析:

这段代码的性能是将两个字符串连接起来,然而只连贯源字符串的前 3 个字符到指标字符串开端,并将后果打印输出。具体分析如下:

在主函数 main 中,首先定义了一个字符数组 destination,并初始化为 “Hello, ” 这个字符串,长度为 20。

而后定义了另一个字符数组 source,并将其初始化为 “World!”。

接着,应用 strncat 函数将 source 中的前 3 个字符连贯到 destination 的开端,因而 destination 最终存储的是 “Hello, Wor”。

最初,通过 printf 函数将连贯后的字符串打印输出,程序返回 0 示意失常执行完结。

注意事项:

须要手动确保指标字符串以空字符 (‘\0’) 结尾。

如果源字符串长度小于 n,指标字符串将用空字符 (‘\0’) 填充。

总体来说,这些函数是 C 语言中字符串操作的根本工具,但在应用时须要小心解决边界条件,以防止缓冲区溢出和其余潜在的问题。

四、字符串比拟函数

字符串比拟函数次要用于比拟两个字符串的内容,其中最罕用的函数包含 strcmp 和 strncmp。

上面是它们的具体介绍:

4.1 strcmp 函数:

strcmp 函数用于比拟两个字符串的内容。

它在 C 规范库中申明如下:

int strcmp(const char *str1, const char *str2);

str1:要比拟的第一个字符串。

str2:要比拟的第二个字符串。

用法:

strcmp 函数比拟两个字符串的字典程序,

如果两个字符串相等,返回值为 0;

如果第一个字符串在字典中排在第二个字符串之前,返回值为正数;

如果第一个字符串在字典中排在第二个字符串之后,返回值为负数。

示例:

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

int main() {char str1[] = "apple";
    char str2[] = "banana";

    int result = strcmp(str1, str2);
    if (result == 0) {printf("The strings are equal.\n");
    } else if (result < 0) {printf("%s comes before %s in dictionary order.\n", str1, str2);
    } else {printf("%s comes after %s in dictionary order.\n", str1, str2);
    }

    return 0;
}

后果:

 apple comes before banana in dictionary order.

代码剖析:

这段代码首先定义了两个字符数组 str1 和 str2 别离存储字符串 “apple” 和 “banana”。

而后,应用 strcmp 函数比拟这两个字符串的字典程序,将比拟后果存储在 result 变量中。

接着,通过条件语句判断 result 的值:

如果为 0,则阐明两个字符串相等,打印输出 “The strings are equal.”;

如果小于 0,则阐明第一个字符串在字典中排在第二个字符串之前,打印输出 “apple comes before banana in dictionary order.”;

如果大于 0,则阐明第一个字符串在字典中排在第二个字符串之后,打印输出 “apple comes after banana in dictionary order.”。

最初,程序返回 0 示意失常执行完结。

注意事项:

strcmp 函数比拟的是字符串的内容,而不是字符串的地址。

对于大多数状况下,strcmp 函数足够用了。然而在一些非凡状况下(例如 解决二进制数据),可能须要应用 memcmp 函数进行比拟。

4.2 strncmp 函数:

strncmp 函数与 strcmp 函数相似,然而能够指定要比拟的字符数目。

它在 C 规范库中申明如下:

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

str1:要比拟的第一个字符串。

str2:要比拟的第二个字符串。

num:要比拟的字符数目。

用法:

strncmp 函数比拟两个字符串的前 num 个字符,如果相等,返回值为 0;

如果第一个字符串在前 num 个字符中排在第二个字符串之前,返回值为正数;

如果第一个字符串在前 num 个字符中排在第二个字符串之后,返回值为负数。

示例:

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

int main() {char str1[] = "apple pie";
    char str2[] = "apple sauce";

    int result = strncmp(str1, str2, 5);
    if (result == 0) {printf("The first 5 characters of the strings are equal.\n");
    } else if (result < 0) {printf("The first 5 characters of %s come before %s.\n", str1, str2);
    } else {printf("The first 5 characters of %s come after %s.\n", str1, str2);
    }

    return 0;
}

后果:

The first 5 characters of the strings are equal.

代码剖析:

这段代码首先定义了两个字符数组 str1 和 str2 别离存储字符串 “apple pie” 和 “apple sauce”。

而后,应用 strncmp 函数比拟这两个字符串的前 5 个字符,将比拟后果存储在 result 变量中。

接着,通过条件语句判断 result 的值:

如果为 0,则阐明这两个字符串的前 5 个字符相等,打印输出 “The first 5 characters of the strings are equal.”;

如果小于 0,则阐明在这 5 个字符范畴内,第一个字符串在字典中排在第二个字符串之前,打印输出 “The first 5 characters of apple pie come before apple sauce.”;

如果大于 0,则阐明在这 5 个字符范畴内,第一个字符串在字典中排在第二个字符串之后,打印输出 “The first 5 characters of apple pie come after apple sauce.”。

最初,程序返回 0 示意失常执行完结。

注意事项:

strncmp 函数用于比拟指定数量的字符,因而在一些特定场景下,更灵便。

须要留神的是,如果指定的字符数超过了其中一个字符串的长度,函数将会进行在较短的字符串处,这可能会导致不合乎预期的后果。

五 总结

通过本博客,读者将对 C 语言中字符串的基本概念、常见处理函数以及赋值、拷贝和比拟等方面有更深刻的了解。

纯熟使用这些字符串处理函数,将有助于进步代码的可读性和效率,使开发者更加熟能生巧地解决字符串操作。

心愿这篇博客可能成为读者学习和把握 C 语言字符串解决的无力工具。

这篇文章到这就完结啦

谢谢大家的浏览!

如果感觉这篇博客对你有用的话,别忘记三连哦。

我是甘甜的江,让咱们咱们下次再见
本文由博客一文多发平台 OpenWrite 公布!

正文完
 0