有人可以推荐我的break和Continue语句之外的替代方法吗?我知道最好不要使用它们。我正在考虑使用do做,但这会使条件变得混乱。有没有更干净的方法可以做到这一点?我正在使用C。由于要求,我不能同时拥有它们。
int inCmpStr( char *a, char *b)
{
int i;
for (i = 0 ; a[i] && b[i]; ++i){
if (a[i] == b[i] || (a[i] ^ 32) == b[i]){
continue;
}
else {
break;
}
}
if(a[i] == b[i]){
return 0;
}
if ((a[i] | 32) < (b[i] | 32)){
return -1;
}
return 1;
}
答案 0 :(得分:3)
您可以使用子功能来避免中断并继续使用。
int cmpChar(char a, char b)
{
if (a == b || (a ^ 32) == b) {
return -1;
}
if (a == b) {
return 0;
}
if ((a | 32) < (b | 32)){
return -1;
}
return 1;
}
int inCmpStr( char *a, char *b)
{
int i;
int result;
for (i = 0 ; a[i] && b[i]; ++i){
result = cmpChar(a[i], b[i]);
if (result != -1) {
return result;
}
}
return 1;
}
答案 1 :(得分:3)
此代码:
for (start; X; increment)
if (Y)
continue;
else
break;
等效于:
for (start; X && Y; increment)
;
因此,您可以使用:
int i;
for (i = 0; a[i] && b[i] && (a[i] == b[i] || (a[i] ^ 32) == b[i]); ++i)
;