Указатели и массивы в C - PullRequest
       1

Указатели и массивы в C

2 голосов
/ 19 августа 2011

Я новичок в C и у меня проблемы с указателями.

В одной функции (используемой для печати слов) у меня есть параметр const char *description, который указывает на массив строк или символов, например "Виден слабый контур лица".

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

char *pointerToFindFirstChar(char *description){
    /* Get my pointer to point to first char in description*/ 
    while (*pointerToFindFirstChar == ' '); 
    pointerToFindFirstChar++;
    return pointer
}      

Я не уверен, как я могу это сделать, хотя. я пытаюсь найти первый непробельный символ в строке, на который указывает описание, и сохранить его в другом указателе (надеюсь, это имеет смысл)

Ответы [ 4 ]

1 голос
/ 19 августа 2011

Попробуйте это:

char *pointerToFindFirstChar(char *description)
{
    while(*description == ' ')
        description++;
    return description;
}

Обратите внимание, что проверка нулевого байта в конце строки не требуется, например, когда *pointer == '\0', условие цикла while равно false и цикл все равно завершится.

Важно избавиться от ; в конце строки while; в противном случае цикл не будет иметь тела и будет выполняться 0 раз или бесконечно (поскольку pointer никогда не изменится в цикле). Если он запускается 0 раз, то при выходе из цикла будет происходить приращение.

1 голос
/ 19 августа 2011
char *find_first_char(char *desc)
{
    while (*desc == ' ') desc++;
    return desc;
}
0 голосов
/ 19 августа 2011

В настоящее время вы ищете любой другой символ в вашем массиве символов.Это также может быть восклицательный знак или двоеточие.

Не лучше ли использовать что-то вроде isalnum() или isalpha()?Если вы ищете цифру (0-9) или альфа-символ (az или AZ), используйте isalnum, в противном случае используйте isalpha.добавить некоторые накладные расходы, хотя.Кроме того, в этом случае потребуется проверка конца массива char.

Другой вариант - использовать isspace(), чтобы проверить наличие любого символа пробела.

Смотрите здесь для описания этих функций: http://www.java2s.com/Code/C/ctype.h/Catalogctype.h.htm

0 голосов
/ 19 августа 2011

Только для записи, возможно иметь постинкремент непосредственно в условии цикла:

char *pointerToFindFirstChar(char *description)
{
    while (*description++ == ' ');

    return description;
}

В этом случае у вас есть пустое тело цикла, потому что приращение выполняется правильнопосле вычисления указателя внутри условия цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...