2010-03-30 3 views
1

мне было интересно, как я мог бы соответствовать строке "Just" в str1 если str1 содержит строки, как:strstr соответствие первого вхождения в с

"this is Just/1.1.249.4021 a test" 
// "Just" will always be the same 

Я пытаюсь соответствовать его с помощью strstr, но до сих пор он выиграл» t из-за /...

Любые предложения по его согласованию? Спасибо

+0

Это действительно компилируется? Кажется, что у вас есть недопустимый строковый литерал - '\ 2323' не является допустимым escape-кодом AFAIK. – EMP

+1

@Evgeny: \ 2323 - действительный восьмеричный побег \ 232, за которым следует цифра 3. –

+0

Извините, строка должна быть такой: Just/1.1.249.4021 – David78

ответ

2

Это работает для меня - как насчет вас?

#include <string.h> 
#include <stdio.h> 
int main(void) 
{ 
    char haystack[] = "this is just\2323 a test"; 
    char needle[] = "just"; 
    char *loc = strstr(haystack, needle); 
    if (loc == 0) 
     printf("Did not find <<%s>> in <<%s>>\n", needle, haystack); 
    else 
     printf("Found <<%s>> in <<%s> at <<%s>>\n", needle, haystack, loc); 
    return(0); 
} 
+0

Извините, строка должна быть такой: Just/1.1.249.4021 – David78

+0

Стандарт C++ говорит, что строковые литералы имеют тип «массив const char», поэтому рекомендуется объявить их как const char * –

+3

@rep_movsd: yes, но Я не объявляю ни строковых литералов. Я объявляю две переменные массивы с удобными инициализаторами. Конечно, я мог бы сделать их const; нет абсолютно никаких обязательств сделать это, и я мог бы изменить строки (тщательно), если захочу. –

1

Что-то должно быть не так с тем, как вы используете strstr() Следующий код работает просто отлично ...

const char *s = "this is just\2323 a test"; 
char *p = strstr(s, "just"); 
if(p) 
    printf("Found 'just' at index %d\n", (int)(p - s)); 
-1

Если строка на самом деле «Just/1.1.249.4021», то это было бы не удается найти «просто», потому что strstr чувствителен к регистру. Если вам нужна версия без учета регистра, вы должны написать свой собственный или Google для существующей реализации.

Смежные вопросы