Функция принимает две строки, хочу сравнить n-й символ - PullRequest
0 голосов
/ 16 апреля 2011

У меня есть функция, которая принимает две строки, и я хочу, скажем, сравнить 2-ю букву каждой строки с другой. Как мне исправить это утверждение:

if (strncmp(str1 + 1, str2 + 1) != 0) {
...

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

Ответы [ 2 ]

3 голосов
/ 16 апреля 2011
if (str1[1] == str2[1]) {
    /* Do something */
}
0 голосов
/ 16 апреля 2011

Если вы хотите разрешить возможность того, что любая из строк может быть меньше позиции, которую вы хотите сравнить:

/* Return 1 if s1[n] > s2[n], 0 if s1[n] == s2[n], -1 if s1[n] < s2[n].
   Return -2 if any of the strings is smaller than n bytes long. */
int compare_nth(const char *s1, const char *s2, size_t n)
{
    size_t i;

    for (i=0; i < n; ++i)
        if (s1[i] == 0 || s2[i] == 0)
            return -2;

    if (s1[n] < s2[n])
        return -1;
    else if (s1[n] > s2[n])
        return 1;
    else
        return 0;
}

Затем, чтобы сделать что-то, когда n й символы равны, вы можете сделать:

if (compare_nth(s1, s2, n) == 0) {
    /* do whatever you want to do here */
}

Если вы точно знаете, что в каждой из строк есть хотя бы n символов, вы можете просто сделать то, что сказали другие:

if (s1[n] == s2[n]) {
    /* do whatever you want to do here */
}

(Примечание: поскольку индексирование в C начинается с 0, n здесь используется в том же смысле. Таким образом, для проверки вторых символов, n будет 1.)

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