gpt4 book ai didi

检查由大括号组成的输入字符串是否格式正确

转载 作者:行者123 更新时间:2023-12-05 01:04:48 25 4
gpt4 key购买 nike

过去两个小时我一直在尝试调试我的代码,该代码应该检查输入是否包含格式正确的括号。我所说的格式良好的意思是()()[]([()])可以接受,但 ((((()不是。

我不允许使用除 <stdio.h> 之外的任何头文件

#include <stdio.h>

void cross(char str[], int i, int j) {
str[i] = 'X';
str[j] = 'X';
}

int iscrossed(char str[]) {
int i = 0;
while (str[i] != '\0') {
if (str[i] != 'X')
return 0;
i++;
}
return 1;
}

int check(char str[]) {
int i = 1, j;
while (str[i] != '\0') {
if (str[i] == ')') {
for (j = i - 1; j >= 0; j--) {
if (str[j] == '(') {
cross(str, str[i], str[j]);
}
break;
}
} else
if (str[i] == ']') {
for (j = i - 1; j >= 0; j--) {
if (str[j] == '[') {
cross(str, str[i], str[j]);
}
break;
}
}
i++;
}
if (iscrossed(str) == 1)
return 1;
else
return 0;
}

int main() {
char str[20];
scanf("%s", str);
printf("%d\n", check(str));
}

对于某些输入,程序会打印一个零,然后是段错误,而对于其他输入,它只打印一个零。请记住,我是初学者,所以请不要在提示中包含太多繁重的内容。如果能提供任何帮助,我将不胜感激。

编辑:如果您的回答能告诉我我的代码中的错误,那就太好了,因为这首先是我的问题。

最佳答案

这里是一个简单的递归解决方案:

#include <stdio.h>

int brace(const char **s, char cc)
{
while(1) {
if(**s == cc) { return 0; }
switch(**s) {
case '\0': return -1;
case '[': ++(*s); if(brace(s, ']')) { return -1; } ++(*s); break;
case '{': ++(*s); if(brace(s, '}')) { return -1; } ++(*s); break;
case '(': ++(*s); if(brace(s, ')')) { return -1; } ++(*s); break;
case ']':
case '}':
case ')': return -1;
default: ++(*s);
}
}
}

int check_brace(const char *s)
{
return brace(&s, '\0');
}


int main()
{
printf("%d\n", check_brace(" hekl(l o{ asdf } te)ts()({})"));
}

出现问题时返回 -1。否则0.

关于检查由大括号组成的输入字符串是否格式正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71406866/

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