【发布时间】:2011-09-06 09:22:34
【问题描述】:
我做了一个程序,可以删除括号内的字符。输入的文本应该有匹配的左括号和右括号。
案例一:
输入: (Hello) World
输出:World
案例 2:
输入: (Hello World
输出:(Hello World
案例 3:
输入: Hello)(World
输出:Hello)(World
案例4:
输入: Hello((hi) World)
输出:Hello
案例 5:
输入: (Hello) hi (World)
输出:hi
这是我的代码:
#include <stdio.h>
int main(){
char string[100] = {0};
char removedletters[100] = {0};
fgets(string, 100, stdin);
char *p;
int x = 0;
int b = 0;
for (p=string; *p!=0; p++) {
if (*(p-1) == '(' && x) {
x = 0;
}
if (*p == ')') {
x = 1;
}
if (!x){
removedletters[b] = *p;
b++;
}
}
puts(removedletters);
}
案例 1、3 和 5 是正确的,但在案例 2 和 4 中不正确。 我的代码有什么问题?
【问题讨论】:
-
使用 strchr 而不是手动搜索字符串
-
if(*(p-1)是第一次迭代的未定义行为。 -
+1 欢迎使用 stackoverflow!第一个问题很好。
-
*(p-1) 当 p=string 时可以是任何东西
-
您的removedletters 字符串由您提到的输出组成?