1.对于一个字符串的循环条件 //for(i = 0; i < strlen(str); i++){ //自己写的 ...
|
2.对于代码优化
/* |
/*括号匹配性
假设从键盘输入的字符串仅仅只由“(”和“)”组成,要求编程判断匹配性。
处理手法:
设置一个变量num,且初值为0;
1、遇到(,num++;
2、遇到),num--;
3、若num < 0,发现失配,立刻结束; //右括号多
4、字符串内容全部处理完毕后,若num > 0,为失配;== 0,表明括号匹配。 //左括号多
*/
#include<stdio.h>
#include<string.h>
typedef unsigned char boolean;
#define TRUE 1
#define FALSE 0
boolean isMarketMatch(char *str, int *misMatchIndex);
void showWrongMatch(char *str, int misMatchIndex);
void showWrongMatch(char *str, int misMatchIndex){
int i;
printf("原字符串为:%s\n", str);
printf("错误位置在:");
for(i = 0; i < misMatchIndex; i++){
printf(" ");
}
printf("^\n");
}
boolean isMarketMatch(char *str, int *misMatchIndex){
int num = 0;
int i;
//for(i = 0; i < strlen(str); i++){ //自己写的
//for(i = 0; str; i++){
for(i = 0; str[i]; i++){ //朱老师写的
if(str[i] == '('){
num++;
}else if(str[i] == ')'){
num--;
}
if(num < 0){
*misMatchIndex = i;
return FALSE;
}
//printf("*\n");
}
//printf("\nnum=%d\n\n", num);
if(num > 0){
*misMatchIndex = i;
//*misMatchIndex = i-1;
return FALSE;
}else{
return TRUE;
}
}
void main(void){
char str[80];
int misMatchIndex;
printf("请输入一串字符(只包含(和)):");
gets(str);
if(isMarketMatch(str, &misMatchIndex)){
printf("括号匹配!\n");
}else{
printf("括号不匹配!\n");
showWrongMatch(str, misMatchIndex);
}
}