Поиск символов в строке в C - PullRequest
0 голосов
/ 30 ноября 2010

Я пишу алгоритм на C с netbeans, чтобы найти звездочки в строке.

int main() {
    int M=0, i, j;
    scanf("%i",&M);
    int pos[M];
    char c[M];
    scanf("%s", c);

    i=0;
    j=1;

    while(c[i] != '\0'){
        if(c[i]=='*'){
            pos[j] = i;
            j++;
        }
        i++;
    }

    printf("Asterisks in positions: \n\n");

    for(j=1; j<=i; j++){
        printf("%i", pos[j]);
    }
    return 0;
}

Но это не работает, он печатает много чисел, даже если M - небольшое число.

Ответы [ 3 ]

2 голосов
/ 30 ноября 2010

Кажется, проблема в том, что вы никогда не учитываете количество найденных символов. Вы печатаете весь вектор, используя i вместо j для итерации. j содержит количество совпадений.

Также попробуйте использовать strchr , из cstring:)

Получить первую позицию, затем выполнить поиск от следующего символа до тех пор, пока не будет возвращен ноль.

1 голос
/ 30 ноября 2010

Информация о количестве найденных звездочек хранится в счетчике j.Эта переменная сбрасывается в цикле for:

for(j=1; j<=i; j++)

Кроме того, этот цикл for проходит вплоть до i, что является длиной входной строки.Попробуйте переработать ваш цикл следующим образом:

for(i=1; i<j; i++){    
    printf("%i", pos[i]);    
} 
0 голосов
/ 30 ноября 2010

После завершения цикла while, j содержит общее количество записанных позиций, поэтому вы должны печатать от pos[1] до pos[j].Ваша текущая петля печатает от pos[1] до pos[i].Просто инвертируйте переменные в вашем последнем цикле:

for(i=1; i<=j; i++){
    printf("%i", pos[i]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...