gpt4 book ai didi

c - 匹配什么样的括号括住字符串并将其删除

转载 作者:行者123 更新时间:2023-11-30 16:02:54 25 4
gpt4 key购买 nike

我正在尝试去掉字符串周围的括号。例如:我可以有(这个字符串)或{这个字符串}或[这个字符串]或+这个字符串+。我只想返回这个字符串(没有任何类型的括号或+)。

我在正则表达式上花了很多时间,但已经放弃了。如果您能提供帮助,那就太好了。

最佳答案

这是一种可能的方法。不一定是最有效的并且没有完整的错误检查。

编辑根据另一篇文章的评论进行了更新,这使得括号听起来好像可以位于字符串中的任何位置。只要所有匹配的括号都有匹配的右括号,这就会删除所有匹配的括号。如果未找到右括号,它不会将它们全部删除。 OP需要做一些功课。它也不会检查括号是否适当平衡,我不清楚这是否是一个要求。

// return 1 if a bracket is found
int RemoveBracket( char *str )
{
char openbracket[] = {'[', '(', '{', '+', '\0' };
char closebracket[] = {']', ')', '}', '+', '\0' };
int start, end, j;
char match = 0;

// find open bracket
start = 0;
for ( ; str[start] && !match; start++ ) {
for ( j = 0; openbracket[j] && !match; j++ ) {
if ( str[start] == openbracket[j] )
match = closebracket[j];
}
if ( match )
break;
}

if ( match == 0 )
// no open bracket found
return 0;

// find closing bracket
end = start + 1;
for ( ; str[end]; end++ ) {
if ( str[end] == match )
break;
}

if ( !str[end] )
// no closing bracket found
return 0;

// remove them
memmove( str + start, str + start + 1, end - start - 1 );
memmove( str + end - 1, str + end + 1, strlen( str + end ) );
return 1; // since we found one
}

void RemoveBrackets( char *str )
{
// remove matching brackets.
while ( RemoveBracket(str ))
;
}

int main( int argc, char* argv[] )
{
char str[50];
strcpy( str, "a[b(c)de]" );
RemoveBrackets( str );
printf( "%s\n", str );
strcpy( str, "{not bracketed" );
RemoveBrackets( str );
printf( "%s\n", str );
strcpy( str, "(paren)s" );
RemoveBrackets( str );
printf( "%s\n", str );
strcpy( str, "abc+def+{gh}i" );
RemoveBrackets( str );
printf( "%s\n", str );
}

关于c - 匹配什么样的括号括住字符串并将其删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4669001/

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