forked from gary/ems
2
0
Fork 0
sun_ems/ems_c/kernel/kit_string.c

137 lines
4.9 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*****************************************************************************
* @copyright 2024-202, . POWER SUPPLY CO., LTD.
* @file xxx.c
* @brief xxxx
* @author xx
* @date 2024/08/30
* @remark 初修订
*****************************************************************************/
#include "kit_string.h"
/*****************************************************************************
* @brief 将字符串转换为整数。如果字符串为空或为 NULL则返回 0。
* @param[in] str: 需要转换的字符串。
* @return 转换后的整数值。如果字符串无效NULL 或长度为 0返回 0。
*****************************************************************************/
int kit_atoi(char *str)
{
// 检查输入字符串是否为 NULL
if (str == NULL)
{
return 0;
}
// 检查字符串是否为空(长度为 0
else if (strlen(str) == 0)
{
return 0;
}
else
{
// 使用标准库函数 atoi 进行字符串到整数的转换
return atoi(str);
}
}
/*****************************************************************************
* @brief 去除字符串右侧的无效字符(空格、回车、换行符、制表符)。
* @param[in] str: 需要处理的字符串,操作将直接修改输入的字符串。
* @return 无返回值,输入字符串将被修改。
*****************************************************************************/
void kit_trim_right(char *str)
{
// 找到字符串末尾,并向左检查无效字符
char *end = str + strlen(str) - 1;
while (end > str && ((unsigned char)(*end) == ' ' || *end == '\r' || *end == '\n' || *end == '\t')) {
end--;
}
// 在去除右侧无效字符后,添加字符串终止符 '\0'
*(end + 1) = '\0';
}
/*****************************************************************************
* @brief 去除字符串左侧的无效字符(空格、回车、换行符、制表符)。
* @param[in] str: 需要处理的字符串,操作将直接修改输入的字符串。
* @return 无返回值,输入字符串将被修改。
*****************************************************************************/
void kit_trim_left(char *str)
{
// 找到字符串左侧的第一个有效字符
char *start = str;
while (*start && ((unsigned char)(*start) == ' ' || *start == '\r' || *start == '\n' || *start == '\t')) {
start++;
}
// 将有效部分的字符串移动到开头
memmove(str, start, strlen(start) + 1);
}
/*****************************************************************************
* @brief 去除字符串两端的无效字符(空格、回车、换行符、制表符)。
* @param[in] str: 需要处理的字符串,操作将直接修改输入的字符串。
* @return 无返回值,输入字符串将被修改。
*****************************************************************************/
void kit_trim_sides(char *str)
{
// 处理空指针和空字符串的情况
if (str == NULL || *str == '\0') {
return;
}
// 从左侧移除无效字符(空格、回车、换行符、制表符)
char *start = str;
while (*start && ((unsigned char)(*start) == ' ' || *start == '\r' || *start == '\n' || *start == '\t')) {
start++;
}
// 如果整个字符串都是无效字符,则返回空字符串
if (*start == '\0') {
str[0] = '\0';
return;
}
// 将有效字符部分移到字符串的开头
memmove(str, start, strlen(start) + 1);
// 从右侧移除无效字符
char *end = str + strlen(str) - 1;
while (end > str && ((unsigned char)(*end) == ' ' || *end == '\r' || *end == '\n' || *end == '\t')) {
end--;
}
// 在右侧无效字符之后添加字符串终止符
*(end + 1) = '\0';
}
/*****************************************************************************
* @brief 用于将字符数组拼接成一个字符串separator分隔
* @param[in] count:字符数组数量
* @param[in] texts:字符串数组
* @param[in] separator:分隔字符
* @return 拼接起来的字符串
*****************************************************************************/
char* kit_join_text(int count, const char** texts, const char* separator)
{
if (count == 0) return NULL;
size_t len = 0;
for (int i = 0; i < count; i++) {
len += strlen(texts[i]);
if (i < count - 1) {
len += strlen(separator);
}
}
char* result = (char*)malloc(len + 1); // 分配内存
if (!result) return NULL;
strcpy(result, texts[0]);
for (int i = 1; i < count; i++) {
strcat(result, separator);
strcat(result, texts[i]);
}
return result;
}