Удаление разрыва и продолжения выписки - PullRequest
0 голосов
/ 15 октября 2018

Может кто-нибудь порекомендовать альтернативу моему перерыву и продолжить высказывания?Я знаю, что это хорошая практика - не использовать их.Однако я подумываю о том, чтобы использовать do time, и это усложнит ситуацию.Есть ли более чистый способ сделать это?Я использую 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;
}

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Этот код:

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)
    ;
0 голосов
/ 15 октября 2018

Вы можете использовать подфункцию, чтобы избежать прерывания и продолжить.

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;
}
...