gpt4 book ai didi

c - 从现有字符串创建字母数字 + '_' 字符串的更简单方法?

转载 作者:行者123 更新时间:2023-12-02 08:57:41 25 4
gpt4 key购买 nike

是否有更好/更简单的方法从现有字符串创建 \w+ 字符串?

 char *FixName(char *name)
{
char *ptr, tmp;
char *new = malloc(strlen(name)+1);
sprintf(new, "str_");
for (ptr = name + 4; *ptr; ptr++)
{
if ((*ptr >= '0' && *ptr <= '9') ||
(*ptr >= 'A' && *ptr <= 'Z') ||
(*ptr >= 'a' && *ptr <= 'z') ||
*ptr == '_')
{
tmp = *(ptr+1);
*(ptr+1) = '\0';
strcat(new, ptr);
*(ptr+1) = tmp;
}
}
free(name);
return new;
}

// USAGE:
//char *j = strdup("str_[](1.00)");
//printf("J: %s\n", j);
//j = FixName(j);
//printf("J: %s\n", j);
//free(j);
// OUTPUT:
//J: str_[](1.00)
//J: str_100

感谢评论,新功能:

  void FixName(char *name)
{
char *ptr;
unsigned short count = strlen("str_");
for (ptr = name + count; *ptr; ptr++)
{
if ((*ptr >= '0' && *ptr <= '9') ||
(*ptr >= 'A' && *ptr <= 'Z') ||
(*ptr >= 'a' && *ptr <= 'z') ||
*ptr == '_')
{
*(name+count) = *ptr;
count++;
}
}
*(name+count) = '\0';
}

最佳答案

要立即使代码更加清晰,您可以做的一件事是使用字 rune 字:

if ((*ptr >= '0' && *ptr <= '9') ||
(*ptr >= 'A' && *ptr <= 'Z') ||
(*ptr >= 'a' && *ptr <= 'z') ||
*ptr == '_')

更好的解决方案是使用 isalnum .

if (isalnum(*ptr) || *ptr == '_')

请注意,不同的区域设置可能会将不同的字符视为字母数字。

您的代码还有一些问题:

  • 您可以在为其分配内存之前计算出所需字符串的大小,以避免过度分配。
  • 您可以通过保留指向目前已到达位置的指针来构建结果,而无需使用 strcat。
  • 我不喜欢函数内对 free 的调用。您无法确定作为参数传入的字符串是否是使用 malloc 分配的。

关于c - 从现有字符串创建字母数字 + '_' 字符串的更简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3678086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com