C语言字符数组与字符串数组
在C语言中,字符数组和字符串数组实际上是同一种类型。字符串是由字符组成的字符数组,通常以空字符 '\\0' 结尾。C语言中的字符串是一种常见的数据类型。我们可以通过两种方式定义字符数组跟字符串数组
char charArray[10]; // 定义一个包含10个字符的字符数组
char strArray[10] = "Hello"; // 定义并初始化一个字符串数组
常用函数之strlen()函数
strlen
是 C 语言中的一个字符串函数,用于计算字符串的长度,即字符串中字符的个数(注意它是不包括结尾的空字符 '\\0')。
函数原型如下:
size_t strlen(const char *str);
参数 str
是一个指向以空字符 '\\0' 结尾的字符串的指针。函数返回一个 size_t
类型的值,表示字符串的长度。
以下是一个使用 strlen
函数的示例代码:
#include < stdio.h >
#include < string.h >
int main(void)
{
char str[] = "Hello, World!";
size_t length = strlen(str);
printf("Length of the string: %zu\\n", length);
return0;
}
在上述示例中,我们定义了一个字符串 str
,并使用 strlen
函数计算字符串的长度,将结果保存在变量 length
中。最后,使用 printf
函数打印字符串的长度。
输出结果为:
Length of the string: 13
注意,strlen
函数返回的长度不包括结尾的空字符 '\\0'。所以对于上述示例中的字符串 "Hello, World!",虽然实际占用的字符数为 13,但 strlen
函数返回的结果是 13,而不是 14。这是因为 C 语言中的字符串以空字符 '\\0' 结尾,作为字符串的结束标志。
5个字母+1个逗号 + 1个空格 + 5个字母+1个感叹号 = 13个字节
常用函数之strcpy()函数
strcpy
是 C 语言中的一个字符串函数,用于将一个字符串复制到另一个字符串中。
函数原型如下:
char *strcpy(char *dest, const char *src);
参数 dest
是目标字符串的指针,src
是源字符串的指针。函数将源字符串的内容复制到目标字符串中,并返回指向目标字符串的指针。//后面的字符串被复制到前面的那个字符串 并返回指向的目标字符串指针
以下是一个使用 strcpy
函数的示例代码:
#include < stdio.h >
#include < string.h >
int main(void)
{
char src[] = "Hello";
char dest[10];
strcpy(dest, src);
printf("Copied string: %s\\n", dest);
return0;
}
在上述示例中,我们定义了一个源字符串 src
,内容为 "Hello",以及一个目标字符串 dest
,大小为 10。使用 strcpy
函数将源字符串的内容复制到目标字符串中。最后,使用 printf
函数打印目标字符串的内容。
输出结果为:
Copied string: Hello
注意,在使用 strcpy
函数时,需要确保目标字符串的缓冲区足够大以容纳源字符串的内容。否则,可能会导致缓冲区溢出的错误。此外,确保源字符串以空字符 '\\0' 结尾,以便 strcpy
函数正确复制整个字符串。
常用函数之strcmp()函数
strcmp
是 C 语言中的一个字符串函数,用于比较两个字符串是否相等。
函数原型如下:
int strcmp(const char *str1, const char *str2);
参数 str1
和 str2
是两个要比较的字符串的指针。函数返回一个整数值,表示比较结果的大小关系:
- 如果
str1
和str2
相等,则返回 0。 - 如果
str1
按字典顺序小于str2
,则返回负数。 - 如果
str1
按字典顺序大于str2
,则返回正数。
什么是按照字典排序呢?
按字典顺序是一种基于字母或字符的比较方式,类似于字典中单词的排列顺序。在 C 语言中,字符串的比较操作是按照字典顺序进行的。
字典顺序比较的规则如下:
- 比较字符串中对应位置的第一个字符。
- 如果两个字符不相等,那么根据它们的 ASCII 值来确定它们的大小关系。较小的字符被认为是在字典中 较早的位置 ,较大的字符被认为是在字典中 较后的位置 。
- 如果两个字符相等,则继续比较下一个字符,直到找到不相等的字符或遇到字符串的结尾(即遇到空字符 '\\0')。
- 如果其中一个字符串到达结尾而另一个字符串还有剩余字符,则被认为到达结尾的字符串较小。
以下是一些示例,帮助理解按字典顺序比较字符串的结果:
- "apple" 按字典顺序小于 "banana",因为 'a' 比 'b' 小。ASCII码值小
- "cat" 按字典顺序大于 "dog",因为 'c' 比 'd' 大。
- "hello" 按字典顺序等于 "hello",因为每个对应位置的字符都相等。
- "open" 按字典顺序大于 "office",因为在第一个字符 'o' 相等的情况下,第二个字符 'p' 比 'f' 大。
需要注意的是,字母的大小比较是基于其对应的 ASCII 值进行的。在 ASCII 编码中,小写字母的 ASCII 值比大写字母的 ASCII 值大*。因此,在按字典顺序比较字符串时,大写字母会被认为是在相应小写字母之前。*
理解按字典顺序比较字符串的概念对于正确使用字符串比较函数(如 strcmp
)以及处理字符串排序等操作非常重要。
以下是一个使用 strcmp
函数的示例代码:
#include < stdio.h >
#include < string.h >
int main(void)
{
char str1[] = "Hello";
char str2[] = "World";
int result = strcmp(str1, str2);
if (result == 0)
{
printf("Strings are equal.\\n");
}
elseif (result < 0)
{
printf("str1 is less than str2.\\n");
}
else
{
printf("str1 is greater than str2.\\n");
}
return0;
}
在上述示例中,我们定义了两个字符串 str1
和 str2
,分别赋值为 "Hello" 和 "World"。使用 strcmp
函数比较这两个字符串,并将结果保存在变量 result
中。然后根据比较结果打印相应的消息。
输出结果为:
str1 is less than str2.
在此示例中,由于 "Hello" 按字典顺序小于 "World",所以 strcmp
函数返回一个负数值,表明 str1
小于 str2
。根据返回的结果,我们输出了相应的消息。
需要注意的是,strcmp
函数是区分大小写的。如果要执行不区分大小写的字符串比较,可以使用 strcasecmp
函数(在一些编译器中可能称为 _stricmp
)。
这是在dev的string.h一段代码 它支持strcasecmp 以及_stricmp
#ifndef __CRT__NO_INLINE
__CRT_INLINE int __cdecl strncasecmp (const char *__sz1, const char *__sz2, size_t __sizeMaxCompare) { return _strnicmp (__sz1, __sz2, __sizeMaxCompare); }
__CRT_INLINE int __cdecl strcasecmp (const char *__sz1, const char *__sz2) { return _stricmp (__sz1, __sz2); }
#else
#define strncasecmp _strnicmp
#define strcasecmp _stricmp
#endif /* !__CRT__NO_INLINE */
常用函数之strcat()函数
strcat
是 C 语言中的一个字符串函数,用于将一个字符串连接到另一个字符串的末尾。
函数原型如下:
char *strcat(char *dest, const char *src);
参数 dest
是目标字符串的指针,src
是源字符串的指针。函数将源字符串的内容连接到目标字符串的末尾,并返回指向目标字符串的指针。
以下是一个使用 strcat
函数的示例代码:
#include < stdio.h >
#include < string.h >
int main(void)
{
char str1[20] = "Hello";
char str2[] = ", World!";
strcat(str1, str2);
printf("Concatenated string: %s\\n", str1);
return0;
}
在上述示例中,我们定义了一个目标字符串 str1
,大小为 20,并初始化为 "Hello"。然后,定义了一个源字符串 str2
,内容为 ", World!"。使用 strcat
函数将 str2
连接到 str1
的末尾,修改了 str1
的内容。最后,使用 printf
函数打印连接后的字符串。
输出结果为:
Concatenated string: Hello, World!
strcat
函数会将源字符串的内容追加到目标字符串的末尾,并确保目标字符串以空字符 '\\0' 结尾。在示例中,str1
原先以空字符结尾,strcat
函数会将 str2
的内容从 str1
结尾处开始拷贝,覆盖掉 str1
的空字符,并在连接的末尾添加一个新的空字符。
需要注意的是,在使用 strcat
函数时,确保目标字符串的缓冲区足够大,以容纳源字符串的内容和额外的空字符。否则,可能会导致缓冲区溢出的错误。
类似这样的函数还有哪些呢?
除了这几个常见的字符串函数外,C 语言还有许多其他常用的字符串函数。以下是一些高频使用的字符串函数:
strcat
:用于将一个字符串连接到另一个字符串的末尾。strncat
:类似于strcat
,但是可以指定要连接的字符数。strcmp
:已经提到过,用于比较两个字符串是否相等。strncmp
:类似于strcmp
,但是可以指定要比较的字符数。strcpy
:已经提到过,用于将一个字符串复制到另一个字符串中。strncpy
:类似于strcpy
,但是可以指定要复制的字符数。strchr
:在字符串中搜索指定字符的第一个出现位置,并返回指向该位置的指针。strrchr
:在字符串中搜索指定字符的最后一个出现位置,并返回指向该位置的指针。strstr
:在字符串中搜索指定子字符串的第一个出现位置,并返回指向该位置的指针。strtok
:将字符串分割成多个子字符串,使用指定的分隔符进行分割。sprintf
:将格式化的数据写入字符串。sscanf
:从字符串中读取格式化的数据。strlen
:已经提到过,用于计算字符串的长度。memset
:将指定的值复制到字符串的每个字符。memcpy
:将一个字符串的内容复制到另一个字符串。
这些函数是 C 语言中处理字符串时经常使用的函数,它们提供了广泛的功能,可用于字符串操作、搜索、比较、复制等。了解和熟练使用这些函数对于处理字符串数据非常重要。建议在需要使用特定功能时,查阅相关函数的文档并参考示例代码以确保正确使用。
-
编码器
+关注
关注
45文章
3563浏览量
133938 -
C语言
+关注
关注
180文章
7591浏览量
135770 -
ASCII
+关注
关注
5文章
171浏览量
35011
发布评论请先 登录
相关推荐
评论