Reputation: 6709
/^[^\s]+\s([^\s]+)\s/
In PHP,I can use regex to get the substr by $1
,
how should I do it in C?
It's better if can do it without regex,though.
UPDATE
Put simply, how do I get werwerur
out of swerwer werwerur y
(the second)?
Upvotes: 5
Views: 338
Reputation: 66
If you are using a posix/unix system like Linux, you could use the regex API directly:
$> man 3 regex
Or google for regcomp()
or regexec()
.
Upvotes: 0
Reputation: 5935
I recommend to use strchr() - it is very fast to find characters in strings
#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);
if you have multiple delimiters, you can use strtok_r() or strpbrk() as in example below:
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);
(should cleanup code: in case if strpbrk returns NULL)
Upvotes: 2
Reputation: 9365
You could look for spaces in a char-string by using this:
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
}
}
If you're looking for the second word, you just have to save the positions of the first space and of the second space and get the character string at the indices between the two.
Upvotes: 0
Reputation: 490048
If I understand what you want correctly, sscanf should be able to do the job:
char result[256];
sscanf("swerwer werwerur y", "%*s %255s", result);
Upvotes: 0
Reputation: 14112
Use strtok() to find the spaces.
#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);
Upvotes: 2