2016-05-30 1 views
-4

У меня есть эта строка:Как извлечь данные внутри строки?

('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);  
        } 
       } 
      } 
     } 
    } 
} 
+2

Вы продолжаете с помощью 'если (d == '\'')' ... Что такое 'd'? Как ему присвоено значение? – pmg

+2

Что такое 'd'? Он проверяется на каждом этапе, но он никогда не устанавливается. –

+0

Вы ищете '' '' '' когда-либо глубже, а '('string1', 'string2', 'string3')', похоже, не содержит этого символа ... – user3078414

ответ

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; 
} 
+0

Спасибо! Ты мне помог @BLUEPIXY! Он печатается с цитатой. Как, если я просто хочу получить значение внутри кавычки? – Kamil

+0

@Kamil 'puts (s1);'? – BLUEPIXY

+0

УДИВИТЕЛЬНО! Большое спасибо. Но, извините, я не мог отдать должное. Требуется 15 репутации хе-хе – Kamil

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++; 
    } 
}