比如:
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像在做数据库前台工具~呵呵
ps:感觉lz像在做数据库前台工具~呵呵
#3
推荐lz用C++中的string类型,或者就是用malloc开辟一块很大的堆内存用来存储这个字符串
或者用scanf将整个字符串先读入某个文件,同时记录字符串长度,等用的时候再做相应操作
或者用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;
}
--------------------
#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用','来分解;
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像在做数据库前台工具~呵呵
ps:感觉lz像在做数据库前台工具~呵呵
#3
推荐lz用C++中的string类型,或者就是用malloc开辟一块很大的堆内存用来存储这个字符串
或者用scanf将整个字符串先读入某个文件,同时记录字符串长度,等用的时候再做相应操作
或者用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;
}
--------------------
#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用','来分解;
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就是传说中的尾巴呀~呵呵