Как я могу получить Substr таким образом в C? - PullRequest
5 голосов
/ 07 мая 2010
/^[^\s]+\s([^\s]+)\s/

В PHP я могу использовать регулярные выражения для получения подстроки по $1,

как мне это сделать в C?

Лучше, если можно сделать это без регулярных выражений.

UPDATE

Проще говоря, как мне получить werwerur из swerwer werwerur y (второй)?

Ответы [ 5 ]

2 голосов
/ 07 мая 2010

Рекомендую использовать strchr () - очень быстро находить символы в строках

#include <string.h>
..
char str[] = "swerwer werwerur y";
char *p1 = NULL,*p2 = NULL;

p1 = strchr(str,' ');
p1++;
p2 = strchr(p1,' ');
if(p2) *p2 = 0;

printf("found: %s\n", p1);

если у вас несколько разделителей, вы можете использовать strtok_r () или strpbrk (), как в примере ниже:

    char str[] = "swerwer ., werwerur + y";
    const char *dlms = " .,+";
    char *p1 = NULL,*p2 = NULL;

    p1 = strpbrk(str,dlms);
    while(strchr(dlms,*p1)) p1++;
    p2 = strpbrk(p1,dlms);
    if(p2) *p2 = 0;

    printf("found: %s\n", p1);

(должен очистить код: в случае, если strpbrk возвращает NULL)

2 голосов
/ 07 мая 2010

Используйте strtok (), чтобы найти пробелы.

Справочная страница Strtok :

#include <string.h>
...
char *token;
char *line = "LINE TO BE SEPARATED";
char *search = " ";


/* Token will point to "LINE". */
token = strtok(line, search);


/* Token will point to "TO". */
token = strtok(NULL, search);
0 голосов
/ 07 мая 2010

Если вы используете систему posix / unix, такую ​​как Linux, вы можете напрямую использовать API regex:

$> man 3 regex

Или Google для regcomp() или regexec().

0 голосов
/ 07 мая 2010

Вы можете искать пробелы в символьной строке, используя это:

char* strText = "word1 word2 word3";
int iTextLen = strlen(strText);
for(int i = 0; i < iTextLen; i++)
{
    if(strText[i] == ' ') //is it a space-character
    {
        //save position or whatever
    }
}

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

0 голосов
/ 07 мая 2010

Если я правильно понимаю, что вы хотите, sscanf должен уметь выполнять эту работу:

char result[256];  
sscanf("swerwer werwerur y", "%*s %255s", result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...