当前位置:  技术问答>linux和unix

如何将字符串拆分并存入结构体?

    来源: 互联网  发布时间:2016-02-05

    本文导语:  麻烦各位帮忙看看 现在有字符串数组{"123|abc|111|aaa|222|bbb|333|ccc"},该如何将字符串拆分并存入一个成员包含ID和name的结构体? 期望实现:1.字符串以"|"拆分,每遇到一次即将"|"之前的字符存入结构体;2.结构体形式最...

麻烦各位帮忙看看
现在有字符串数组{"123|abc|111|aaa|222|bbb|333|ccc"},该如何将字符串拆分并存入一个成员包含ID和name的结构体?
期望实现:1.字符串以"|"拆分,每遇到一次即将"|"之前的字符存入结构体;2.结构体形式最好是动态链表结构;3.希望能有较详细的程序及注释说明。

|
#include 
#include 
#include 
struct aa{     //定义一个结构体
char id[10];
char name[10];
char buf[10][10];
int i;
struct aa *next;
};


int main()
{
char buf[]="123|abc|111|aaa|222|bbb|333|ccc"; //待分割的字符串
char *delim="|" ;//分割符
char *ptr=NULL,*str=NULL,tmpbuf[128];
int i=0,num=10;
struct aa *aa_ptr=NULL,*aa_head=NULL,*aa_tail=NULL;
for(i=0;ii=i;                                    //
while((str=strtok(ptr,delim))!=NULL)   //以delim为分割符,分割字符串
 {
    if(num==0)                      //如果是第一个数据,放入id内
     strcpy(aa_ptr->id,str);
    else if(num==1)                  //如果是第二个数据,放入name内
    strcpy(aa_ptr->name,str);
    else strcpy(aa_ptr->buf[num-2],str);    //其它的放入buf内,
    num++;   //计数器改变
    ptr=NULL; //strtok函数的使用方法是,第一此使用时,把待分割的字符串传进去,再使用时,strtok(NULL,delim)就行了
 }
if(!aa_head)aa_head=aa_ptr;                //如过,头指针是空的,即是第一个结构体,则头指针指向它
if(aa_tail)aa_tail->next=aa_ptr;     //如果尾指针不空,即现在不是第一个结构体,则把当前的结构体链如到尾部.
aa_tail=aa_ptr;   //尾指针后移.
}

aa_ptr=aa_head;//当前指针指向链表的头部.
while(aa_ptr)  //循环输出,并释放结构体
{
printf(" %d  id=%s,name=%s,other %s,%s,%s,%s,%s,%sn",aa_ptr->i,aa_ptr->id,aa_ptr->name,aa_ptr->buf[0],aa_ptr->buf[1],aa_ptr->buf[2],aa_ptr->buf[3],aa_ptr->buf[4],aa_ptr->buf[5]);
//输出数据
aa_head=aa_ptr->next;  //头指针下移   
free(aa_ptr);          //释放当前结构体
aa_ptr=aa_head;        //当前结构体指向头部.
}

//另外一种分割方法.
char a[10],b[10],c[10],d[10],e[10],f[10],g[10],h[10];
memset(a,0,10);
memset(b,0,10);
memset(c,0,10);
memset(d,0,10);
memset(e,0,10);
memset(f,0,10);
memset(g,0,10);
memset(h,0,10);
sscanf(buf,"%[^|]|%[^|]|%[^|]|%[^|]|%[^|]|%[^|]|%[^|]|%[^|]",a,b,c,d,e,f,g,h);
printf("%s,%s,%s,%s,%s,%s,%s,%sn",a,b,c,d,e,f,g,h);
}

|
给你点提示吧。
字符串的拆分你仔细看看string.h头文件,里面有函数可以查找某个字符的,如:'|'。所以你只要用两个整形变量记住每次查找的起始位置和找到的终止位置就可以实现拆分了,至于结构体中要有链表结构,这个就是维护一个指针的问题,一般的C语言书上都有代码的啊,这个不难。
这个代码很简单,还是自己练练手吧。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Strings(字符串) 成员 size():返回字符串中字符的数量
  • 关于字符串的操作,我想得到字符串的长度,和他开始两位组成的新的字符串,例如::
  • C++ Strings(字符串) 成员 c_str():将字符串以C字符数组的形式返回
  • C语言实现输入一个字符串后打印出该字符串中字符的所有排列
  • C++ Strings(字符串) 成员 find():在字符串中查找字符
  • 如何使GDB显示完整的字符串变量,当字符串比较长时。
  • C++ Strings(字符串) 成员 end():返回一个迭代器,指向字符串的末尾。(最后一个字符的下一个位置)
  • php判断字符串在另一个字符串位置的方法
  • C++ Strings(字符串) 成员 empty():如果字符串为空,返回真
  • 请教,有关16进制字符串形成2进制字符串的问题!
  • C++ Strings(字符串) 成员 length():返回字符串的长度
  • 如何将一个双引号”放在一个字符串中,就是在字符串中如何转义一个双引号。谢谢!
  • C++ Strings(字符串) 成员 resize():重新设置字符串的大小
  • shell程序:在大文件中查找特定字符串,但该字符串可以跨行
  • C++ Strings(字符串) 成员 Operators:操作符,用于字符串比较和赋值
  • 怎样判断一个字符串在另一个字符串里面?
  • C++ Strings(字符串) 成员 reserve():保留一定容量以容纳字符串(设置capacity值)
  • 请问怎样从键盘读入一个字符串,怎样连接两个字符串,谢谢
  • C++ Strings(字符串) 成员 swap():交换两个字符串的内容
  • 浅析string类字符串和C风格字符串之间的区别
  • C++ Strings(字符串) 成员 rbegin():返回一个逆向迭代器,指向最后一个字符
  • 如何用shell实现将指定文件中的指定的字符串替换为我指定的另外的字符串
  • C++ Strings(字符串) 成员 insert():插入字符
  • 有个小问题,如何将一字符串按一定规则分割成字符串数组?
  • Linux c字符串中不可打印字符转换成16进制
  • 在JAVA中如何实现在一个长字符串查找某个字符串??
  • C++ Strings(字符串) 成员 find_first_of():查找第一个与value中的某值相等的字符
  • 如何用sha1sum获取一个字符串使用sha-1加密后的16进制字符串?
  • C++ Strings(字符串) 成员 find_last_of():查找最后一个与value中的某值相等的字符
  • 在SQL中获取一个长字符串中某个字符串出现次数的实现方法
  • C++ Strings(字符串) 成员 get_allocator():返回配置器


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3