Как найти базовый адрес того же символа в массиве строк, используя указатели на языке Си? - PullRequest
0 голосов
/ 16 мая 2019

Я ввожу строку и затем пытаюсь найти адрес char в строке, но проблема в том, что я не могу найти адрес того же char в строке с помощью указателей.

Например, когда ввод "ALLEN" Мне нужны адреса обоих 'L' с, но моя программа печатает только адрес первого 'L'.

Я пробовал if ... else и for- но я не могу решить проблему.

#include <stdio.h> 
#include <string.h> 


main() 
{ 
    char a, str[81], *ptr;

    printf("\nEnter a sentence:");
    gets(str); 

    printf("\nEnter character to search for:");
    a = getchar(); 
    ptr = strchr(str,a);

     /* return pointer to char*/ 

    printf( "\nString starts at address: %d",str);
    printf("\nFirst occurrence of the character (%c) is at address: %d ", a,ptr);  
}

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

Если я вас правильно понял:

Чтобы найти дополнительные вхождения того же персонажа, просто найдите их после последнего известного вхождения. Итак, вы бы написали что-то вроде этого:

{
    const char* next_occurrence = strchr(str, a);
    while (next_occurrence != NULL) {
        printf(
            "Character %c occurs in string \"%s\" at position %p\n",
            a, str, next_occurrence - str);
        next_occurrence = strchr(next_occurrence + 1, a);
    }
}

Вы заметите, что next_occurrence + 1 - это адрес первого символа после вхождения, который мы только что нашли.

1 голос
/ 16 мая 2019

Просто позвоните strchr еще раз:

ptr = strchr(str,a);
if (ptr != NULL)
    ptr2 = strchr (ptr + 1, a);

Обратите внимание, что первый параметр для strchr - это ptr + 1, поэтому мы начинаем поиск с того символа, который уже найден.

...