我有这个字符串:
('string1', 'string2', 'string3');
我想只提取string1,string2,string3。
的数据尝试过这样的事情:
scanf("%s", &data1);
printf("%s", data1);
if(d=='`')
{
scanf("%s", &sampah);
printf("%s", sampah);
if(d=='`')
{
scanf("%s", &data2);
printf("%s", data2);
if(d=='`')
{
scanf("%s", &sampah);
printf("%s", sampah);
if(d=='`')
{
scanf("%s", &data3);
printf("%s", data3);
if(d=='`')
{
scanf("%s", &sampah);
printf("%s", sampah);
if(d=='`')
{
scanf("%s", &data4);
printf("%s", data4);
}
}
}
}
}
}
答案 0 :(得分:1)
你需要简单的有限状态机,它有两个状态"在引号内"和"外部引号",引号在这两个状态之间转换。
类似的东西:
void tokenize(const char *str)
{
const char *c = str;
int in_quotes = 0;
const char *start_of_token;
while (*c) { // examine each character
if (*c == '\'') {
if (!in_quotes) {
start_of_token = c + 1; // quoted string starts at character following the quote
in_quotes = 1;
} else {
// here is the end of token. It starts at start_of_token
// and is c-start_of_token characters long
int token_length = c-start_of_token
do_something(start_of_token, token_length);
in_quotes = 0;
}
}
c++;
}
}
答案 1 :(得分:0)
#include <stdio.h>
int main(void){
char str[] = "('string1', 'string2', 'string3');";
char s1[16], s2[16], s3[16], ch;
if(3==sscanf(str, "( '%15[^']' , '%15[^']' , '%15[^']' ) ; %c", s1, s2, s3, &ch)){
printf("'%s'\n", s1);
printf("'%s'\n", s2);
printf("'%s'\n", s3);
}
return 0;
}