C语言 字符串处理相关函数大汇总之(11~15)

2023-12-19 21:21:54

11,strtok函数,用于将字符串按照指定的分隔符进行分割。

strtok?函数在首次调用时需要传入待分割的字符串和分隔符,之后的连续调用只需要传入?NULL?作为第一个参数即可继续上一次的分割。函数原型如下:

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

参数说明:

  • str:待分割的字符串。在首次调用?strtok?时,需要传入待分割的字符串;在连续调用时,传入?NULL
  • delim:分隔符字符串,包含一组用作分隔符的字符。

返回值:

  • 当成功找到子串时,返回指向该子串的指针。
  • 当没有更多子串可供返回时,返回?NULL

注意事项:

  1. strtok?函数会修改原始字符串,将其拆分为子串。因此,在使用?strtok?之前,请确保原始字符串是可修改的。
  2. strtok?函数是非重入(non-reentrant)的,因为它使用静态缓冲区来存储上一次调用的状态。这意味着在多线程环境中使用?strtok?可能会导致问题。在这种情况下,可以考虑使用线程安全的替代函数,如?strtok_r

下面是一个简单的示例,展示如何使用?strtok?函数:

#include <stdio.h>  
#include <string.h>  
  
int main() {  
    char input[] = "This,is,a,test.";  
    const char *delimiter = ",";  
    char *token;  
  
    /* 获取第一个子串 */  
    token = strtok(input, delimiter);  
    while (token != NULL) {  
        printf("%s\n", token);  
        /* 获取下一个子串 */  
        token = strtok(NULL, delimiter);  
    }  
  
    return 0;  
}

在这个示例中,我们使用逗号作为分隔符来分割字符串?"This,is,a,test."。程序会输出:

This  
is  
a  
test.

12,atoi 函数,将字符串转整数。

函数原型:

int atoi(const char *str);

参数:

  • str:要转换的字符串。

返回值:

  • 如果字符串表示的数字在?int?类型的范围内,则返回对应的整数值。
  • 如果字符串表示的数字超出了?int?类型的范围,则返回?INT_MAX?或?INT_MIN(取决于超出的方向)。
  • 如果字符串不包含数字字符,则返回 0。
  • 如果字符串为空指针,则行为是未定义的。

示例:

#include <stdio.h>  
#include <stdlib.h>  
  
int main() {  
    const char *str = "123";  
    int num = atoi(str);  
    printf("Number: %d\n", num);  // 输出: Number: 123  
    return 0;  
}

????????请注意,atoi?函数在转换过程中不会进行错误检查,因此在使用它之前,最好确保输入的字符串确实包含有效的数字字符。如果需要更健壮的转换函数,可以考虑使用?strtol?或?sscanf?等函数。

13,atof 函数,将字符串转float类型的数据。

函数原型:

double atof(const char *str);

参数:

  • str:要转换的字符串。

返回值:

  • 如果字符串表示的数字在?double?类型的范围内,则返回对应的浮点数值。
  • 如果字符串表示的数字超出了?double?类型的范围,则返回?HUGE_VAL?或?-HUGE_VAL(取决于超出的方向)。
  • 如果字符串不包含数字字符,则返回 0.0。
  • 如果字符串为空指针,则行为是未定义的。

示例:

#include <stdio.h>  
#include <stdlib.h>  
  
int main() {  
    const char *str = "3.14";  
    double num = atof(str);  
    printf("Number: %f\n", num);  // 输出: Number: 3.140000  
    return 0;  
}

????????同样地,atof?函数在转换过程中不会进行错误检查,因此在使用它之前,最好确保输入的字符串确实包含有效的数字字符。如果需要更健壮的转换函数,可以考虑使用?strtod?或?sscanf?等函数。

14,atol 函数,将字符串转long类型的数据。

函数原型:

long atol(const char *str);

参数:

  • str:要转换的字符串。

返回值:

  • 如果字符串表示的数字在?long int?类型的范围内,则返回对应的整数值。
  • 如果字符串表示的数字超出了?long int?类型的范围,则返回?LONG_MAX?或?LONG_MIN(取决于超出的方向)。
  • 如果字符串不包含数字字符,则返回 0。
  • 如果字符串为空指针,则行为是未定义的。

示例:

#include <stdio.h>  
#include <stdlib.h>  
  
int main() {  
    const char *str = "12345";  
    long int num = atol(str);  
    printf("Number: %ld\n", num);  // 输出: Number: 12345  
    return 0;  
}

????????同样地,atol?函数在转换过程中不会进行错误检查,因此在使用它之前,最好确保输入的字符串确实包含有效的数字字符。如果需要更健壮的转换函数,可以考虑使用?strtol?或?sscanf?等函数。

15,atoll 函数,将字符串转long long类型的数据。

函数原型:

long long int atoll(const char *str);

参数:

  • str:要转换的字符串。

返回值:

  • 如果字符串表示的数字在?long long int?类型的范围内,则返回对应的整数值。
  • 如果字符串表示的数字超出了?long long int?类型的范围,则返回?LLONG_MAX?或?LLONG_MIN(取决于超出的方向)。
  • 如果字符串不包含数字字符,则返回 0。
  • 如果字符串为空指针,则行为是未定义的。

示例:

#include <stdio.h>  
#include <stdlib.h>  
  
int main() {  
    const char *str = "123456789012";  
    long long int num = atoll(str);  
    printf("Number: %lld\n", num);  // 输出: Number: 123456789012  
    return 0;  
}

????????同样地,atoll?函数在转换过程中不会进行错误检查,因此在使用它之前,最好确保输入的字符串确实包含有效的数字字符。如果需要更健壮的转换函数,可以考虑使用?strtoll?或?sscanf?等函数。

文章来源:https://blog.csdn.net/A185822153/article/details/135071725
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。