请教一个C的字符串提取的问题

时间:2023-01-07 15:52:58
现在我要输入一个标准的SQL语句到一个字符串.
比如:
select A1.SSN,A1.Name,A1.Address,A2.Salary,A2.Num from A1 A2 where A1.SSN='
123-456-7690'

这样:  
#include <stdio.h>
main()
{
char str[100];

gets(str); 
//str就是"select A1.SSN,A1.Name,A1.Address,A2.Salary,A2.Num from A1 A2 where
 A1.SSN='123-456-7690'"
//其中 输入的"需要显示的字段"的个数不确定,有可能1个,有可能5个,也有可能100个.

现在的问题是,有什么办法,可以将这些字段提取出去.
我想用 sscanf 函数,但是因为字段个数不确定,所以还没有解决


望前辈指教指教

9 个解决方案

#1


我只会最笨的方法。。

关注中。。。。。。

#2


用strtok;
ps:感觉lz像在做数据库前台工具~呵呵

#3


推荐lz用C++中的string类型,或者就是用malloc开辟一块很大的堆内存用来存储这个字符串


或者用scanf将整个字符串先读入某个文件,同时记录字符串长度,等用的时候再做相应操作

#4


扫描逗号确定显示数目

#5


循环, 可以用 C 的strtok,
记录字符串的索引,
叠加上去就可以了

#6


strtok

#7


用strtok实现很简单。
--------------------
#include<stdio.h>
#include<string.h>

int main(void)

    char *p[20];
    char str[] = "select A1.SSN,A1.Name,A1.Address,A2.Salary,A2.Num from A1 A2 where A1.SSN='123-456-7690'";
    
    int i = 0, j = 0;
    p[i++] = strtok(str, ",");
    for (; i < 20; ++i) {
        p[i] = strtok(NULL, ",");
        if (p[i] == NULL) {
                 break;
        }
    }
    for (; j < i; ++j) {
        puts(p[j]);
    }
    system("PAUSE");
    return 0;
}

#8


可以先用
 char tmp[256];
char str[]="select A1.SSN,A1.Name,A1.Address,A2.Salary,A2.Num from A1 A2 where A1.SSN='123-456-7690'";

sscanf(str,"select %s from",tmp);

把字段列表先提取出来,然后对tmp用','来分解;

#9


ls就是传说中的尾巴呀~呵呵

#1


我只会最笨的方法。。

关注中。。。。。。

#2


用strtok;
ps:感觉lz像在做数据库前台工具~呵呵

#3


推荐lz用C++中的string类型,或者就是用malloc开辟一块很大的堆内存用来存储这个字符串


或者用scanf将整个字符串先读入某个文件,同时记录字符串长度,等用的时候再做相应操作

#4


扫描逗号确定显示数目

#5


循环, 可以用 C 的strtok,
记录字符串的索引,
叠加上去就可以了

#6


strtok

#7


用strtok实现很简单。
--------------------
#include<stdio.h>
#include<string.h>

int main(void)

    char *p[20];
    char str[] = "select A1.SSN,A1.Name,A1.Address,A2.Salary,A2.Num from A1 A2 where A1.SSN='123-456-7690'";
    
    int i = 0, j = 0;
    p[i++] = strtok(str, ",");
    for (; i < 20; ++i) {
        p[i] = strtok(NULL, ",");
        if (p[i] == NULL) {
                 break;
        }
    }
    for (; j < i; ++j) {
        puts(p[j]);
    }
    system("PAUSE");
    return 0;
}

#8


可以先用
 char tmp[256];
char str[]="select A1.SSN,A1.Name,A1.Address,A2.Salary,A2.Num from A1 A2 where A1.SSN='123-456-7690'";

sscanf(str,"select %s from",tmp);

把字段列表先提取出来,然后对tmp用','来分解;

#9


ls就是传说中的尾巴呀~呵呵