C: оценить часть строки - PullRequest
4 голосов
/ 07 апреля 2010

Я не могу найти выражение для оценки части строки.

Я хочу получить что-то подобное:

if (string[4:8]=='abc') {...}

Я начал писать так:

if (string[4]=='a' && string[5]=='b' && string[6]=='c') {...}

но если мне нужно оценить большую часть строки, как

if (string[10:40] == another_string) {...}

тогда получается написать слишком много выражений. Есть ли готовые решения?

Ответы [ 3 ]

6 голосов
/ 07 апреля 2010

Вы всегда можете использовать strncmp(), поэтому string[4:8] == "abc" (что, конечно, не является синтаксисом C) может стать strncmp(string + 4, "abc", 5) == 0.

2 голосов
/ 07 апреля 2010

Стандартная функция библиотеки C, которую вы хотите: strncmp. strcmp сравнивает две строки C и - как обычно, версия "n" имеет дело с элементами данных ограниченной длины.

if(0==strncmp(string1+4, "abc", 4))
    /* this bit will execute if string1 
       ends with "abc" (incluing the implied null)
       after the first four chars */
0 голосов
/ 07 апреля 2010

Решения strncmp , опубликованные другими, вероятно, являются лучшими.Если вы не хотите использовать strncmp или просто хотите узнать, как реализовать свой собственный, вы можете написать что-то вроде этого:

int ok = 1;
for ( int i = start; i <= stop; ++i )
    if ( string[i] != searchedStr[i - start] )
    {
        ok = 0;
        break;
    }

if ( ok ) { } // found it
else      { } // didn't find it
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...