gpt4 book ai didi

c - 如何改进这种trim-half-string算法?

转载 作者:行者123 更新时间:2023-11-30 20:41:44 27 4
gpt4 key购买 nike

我有一个简单的算法,可以清除从半个字符串到末尾的空格。这是:

char a[] = "abc         "; /* The string to string to trim. */
printf("orginal [%s]\n", a);
char * org = strdup(a); /* duplicate the orginal string */
char * half_str = org + strlen(a) / 2; /* Get the half of string. */
strrev(half_str); /* reverse the string */
char * phs = half_str; /* Point to half_string */
char * news = malloc(strlen(half_str) + 1); /* The new string, without spaces. */
char * ptonews = news; /*Pointer to new string */

while(*phs)
{
/* if it's not whitespace like( ,\f,\r,\t,\v,\n) then concat to new string. */
if(!isspace(*phs)) {
*ptonews ++= *phs;
}
phs ++;
}

/*Put the 0-terminator into new string. */
*phs ++ = '\0';

/* Replace the half_str with the newstring */
strcpy(half_str, news);

printf("new string [%s]\n", org);

效果很好。输出是:

orginal [abc        ]
new string [abc]

但是C代码有点慢。我该如何改进?

最佳答案

您正在进行大量不必要的分配。尝试这样的事情:

char a[] = "abc     ";
printf( "original [%s]\n", a);
int halfTrimmed = strlen(a)/2 + 1;
for( ; halfTrimmed>0; halfTrimmed-- )
if( !isspace(a[halfTrimmed-1]) ) break;
char* news = malloc( halfTrimmed+1 );
strncpy( news, a, halfTrimmed );
printf( "new string [%s]\n", news );

换句话来说,该算法找到一半字符串的索引 (halfTrimmed),然后从该索引开始查看每个字符,直到找到第一个非空格索引。然后,它将从原始字符串的开头到最后一个非空格索引复制到新字符串中,然后就完成了。

关于c - 如何改进这种trim-half-string算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9965765/

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