C语言字符串函数集锦(一)(C语言常用字符串函数详解(一))
原创
C语言字符串函数集锦(一)
C语言中的字符串处理函数是编程中时常使用到的工具,它们为字符串的创建、操作、搜索和转换等提供了极大的便利。本文将详细介绍一些常用的字符串函数,并给出相应的示例代码。
1. 字符串长度函数 - strlen
strlen
函数用于计算字符串的长度,不包括完成符 '\0'。其原型定义在 <string.h>
头文件中。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
printf("字符串长度: %lu ", strlen(str));
return 0;
}
2. 字符串拷贝函数 - strcpy 和 strncpy
strcpy
函数用于将一个字符串拷贝到另一个字符串中,它会覆盖目标字符串原有的内容,并且不检查目标字符串的大小,也许造成缓冲区溢出。而 strncpy
函数则可以指定拷贝的最大字符数,从而避免溢出。
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello, World!";
char dest[20];
strcpy(dest, src);
printf("拷贝后的字符串: %s ", dest);
char dest2[20];
strncpy(dest2, src, 7);
dest2[7] = '\0'; // 确保字符串正确完成
printf("部分拷贝后的字符串: %s ", dest2);
return 0;
}
3. 字符串连接函数 - strcat 和 strncat
strcat
函数用于将一个字符串连接到另一个字符串的末尾,它会自动覆盖目标字符串的完成符 '\0'。而 strncat
函数则可以指定连接的最大字符数,以防止缓冲区溢出。
#include <stdio.h>
#include <string.h>
int main() {
char str1[30] = "Hello, ";
char str2[] = "World!";
strcat(str1, str2);
printf("连接后的字符串: %s ", str1);
char str3[30] = "Hello, ";
char str4[] = "World!";
strncat(str3, str4, 3);
printf("部分连接后的字符串: %s ", str3);
return 0;
}
4. 字符串比较函数 - strcmp 和 strncmp
strcmp
函数用于比较两个字符串的大小,按照字典顺序进行。如果第一个字符串小于第二个字符串,返回一个小于0的值;如果相等,返回0;如果大于,返回一个大于0的值。而 strncmp
函数可以指定比较的最大字符数。
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello";
char str2[] = "World";
char str3[] = "Hello";
printf("比较于是: %d ", strcmp(str1, str2)); // 负数
printf("比较于是: %d ", strcmp(str1, str3)); // 0
printf("比较于是: %d ", strcmp(str2, str1)); // 正数
char str4[] = "Hello";
char str5[] = "Helloo";
printf("部分比较于是: %d ", strncmp(str4, str5, 5)); // 0
return 0;
}
5. 字符串查找函数 - strchr 和 strstr
strchr
函数用于在字符串中查找指定的字符,并返回指向该字符的指针。如果未找到,则返回NULL。而 strstr
函数用于查找指定的子字符串,并返回指向子字符串开头的指针。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
char *found = strchr(str, 'W');
if (found != NULL) {
printf("找到字符 'W': %s ", found);
}
char *sub_str = strstr(str, "World");
if (sub_str != NULL) {
printf("找到子字符串 'World': %s ", sub_str);
}
return 0;
}
6. 字符串转换函数 - atof, atoi, atol 和 strtod, strtof, strtold
这些函数用于将字符串成为不同的数值类型。例如,atof
将字符串成为双精度浮点数,atoi
将字符串成为整数等。
#include <stdio.h>
#include <stdlib.h>
int main() {
char str1[] = "123.456";
char str2[] = "123";
char str3[] = "123456789";
double val1 = atof(str1);
int val2 = atoi(str2);
long val3 = atol(str3);
printf("转换于是: %f ", val1);
printf("转换于是: %d ", val2);
printf("转换于是: %ld ", val3);
return 0;
}
7. 字符串替换函数 - str_replace
虽然C标准库中没有直接提供字符串替换函数,但我们可以通过编写自定义函数来实现。以下是一个明了的字符串替换函数的实现。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *str_replace(const char *src, const char *find, const char *replace) {
char *result;
int i, count = 0;
int new_len = 0;
int find_len = strlen(find);
// 计算新字符串的长度
for (i = 0; src[i] != '\0'; i++) {
if (strncmp(&src[i], find, find_len) == 0) {
count++;
i += find_len - 1;
}
new_len++;
}
new_len += count * (strlen(replace) - find_len);
// 分配新字符串的内存
result = (char *)malloc(new_len + 1);
if (result == NULL) {
return NULL;
}
// 替换字符串
i = 0;
int j = 0;
while (src[i] != '\0') {
if (strncmp(&src[i], find, find_len) == 0) {
strcpy(&result[j], replace);
j += strlen(replace);
i += find_len;
} else {
result[j++] = src[i++];
}
}
result[j] = '\0';
return result;
}
int main() {
const char *str = "Hello, World! World is beautiful.";
const char *find = "World";
const char *replace = "Universe";
char *replaced_str = str_replace(str, find, replace);
if (replaced_str != NULL) {
printf("替换后的字符串: %s ", replaced_str);
free(replaced_str);
}
return 0;
}
以上是C语言中一些常用的字符串函数及其使用示例。掌握这些函数可以帮助我们更高效地处理字符串,避免在编写程序时犯不正确。