C语言字符与字符串处理全解析

字符处理函数

C语言标准库ctype.h提供了一系列字符处理函数,用于判断或转换单个字符。这些函数通常以isto开头:

  • isalpha(int c):判断字符是否为字母(a-z或A-Z)
  • isdigit(int c):判断字符是否为数字(0-9)
  • isalnum(int c):判断字符是否为字母或数字
  • islower(int c):判断字符是否为小写字母
  • isupper(int c):判断字符是否为大写字母
  • tolower(int c):将字符转换为小写
  • toupper(int c):将字符转换为大写

示例代码:

#include <ctype.h>
#include <stdio.h>

int main() {
    char ch = 'A';
    if (isupper(ch)) {
        printf("%c in lowercase is %c\n", ch, tolower(ch));
    }
    return 0;
}

字符串处理函数

C语言标准库string.h提供了常用的字符串操作函数:

  • strlen(const char *str):计算字符串长度(不包括终止符'\0')
  • strcpy(char *dest, const char *src):复制字符串
  • strncpy(char *dest, const char *src, size_t n):安全复制字符串,指定最大长度
  • strcat(char *dest, const char *src):连接字符串
  • strncat(char *dest, const char *src, size_t n):安全连接字符串,指定最大长度
  • strcmp(const char *str1, const char *str2):比较字符串
  • strncmp(const char *str1, const char *str2, size_t n):安全比较字符串,指定比较长度
  • strchr(const char *str, int c):查找字符首次出现位置
  • strstr(const char *haystack, const char *needle):查找子字符串

示例代码:

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

int main() {
    char str1[20] = "Hello";
    char str2[] = "World";
    
    strcat(str1, " ");
    strcat(str1, str2);
    printf("%s\n", str1);  // 输出: Hello World
    
    if (strcmp(str1, "Hello World") == 0) {
        printf("Strings are equal\n");
    }
    return 0;
}

字符串转换函数

stdlib.h提供了字符串与其他类型转换的函数:

  • atoi(const char *str):字符串转整数
  • atof(const char *str):字符串转浮点数
  • strtol(const char *str, char **endptr, int base):字符串转长整数
  • strtod(const char *str, char **endptr):字符串转双精度浮点数

示例代码:

#include <stdlib.h>
#include <stdio.h>

int main() {
    char numStr[] = "12345";
    int num = atoi(numStr);
    printf("%d\n", num + 1);  // 输出: 12346
    
    char floatStr[] = "3.14159";
    double pi = atof(floatStr);
    printf("%.2f\n", pi);  // 输出: 3.14
    return 0;
}

安全字符串函数

C11标准引入了更安全的字符串函数版本,以_s结尾:

  • strcpy_s(char *dest, rsize_t destsz, const char *src)
  • strcat_s(char *dest, rsize_t destsz, const char *src)
  • strncpy_s(char *dest, rsize_t destsz, const char *src, rsize_t n)

这些函数在操作时会检查目标缓冲区大小,防止缓冲区溢出。使用时需要定义__STDC_WANT_LIB_EXT1__宏为1。

格式化字符串函数

stdio.h提供了字符串格式化相关函数:

  • sprintf(char *str, const char *format, ...):格式化输出到字符串
  • snprintf(char *str, size_t size, const char *format, ...):安全格式化输出到字符串
  • sscanf(const char *str, const char *format, ...):从字符串读取格式化输入

示例代码:

#include <stdio.h>

int main() {
    char buffer[50];
    int a = 10, b = 20;
    snprintf(buffer, sizeof(buffer), "Sum of %d and %d is %d", a, b, a + b);
    printf("%s\n", buffer);  // 输出: Sum of 10 and 20 is 30
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值