linux C 截取字符串放到数组中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux C 截取字符串放到数组中相关的知识,希望对你有一定的参考价值。

比如我得到如下字符串,然后我要"<BILL_Charge><BILL_Charge>"之间的内容依次放到一个数组中,<BILL_Cycle></BILL_Cycle>这个也类似,我想不到好方法,请叫下高手
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<NewDataSet xmlns=""><re_DataSet diffgr:id="re_DataSet1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
<PAY_FLOWID>Ctc47439557</PAY_FLOWID><ACCOUNT_ID>2741002744574</ACCOUNT_ID><DeviceNO>57481138197</DeviceNO>
<USER_NAME>宁波市鄞州**建筑装饰有限公司</USER_NAME><InvoiceCode /><BILL_Cycle>201009</BILL_Cycle>
<BILL_Charge>489.55</BILL_Charge><InvoiceItemNum>8</InvoiceItemNum>
<Item_Info>月基本费:35|增值业务费:81|本地话费:143.8|互联网使用费:150|优惠(补足)费:-15|违约金:94.75|本期费用小计:489.58|预存款支付:0
</Item_Info></re_DataSet><re_DataSet diffgr:id="re_DataSet2" msdata:rowOrder="1" diffgr:hasChanges="inserted">
<PAY_FLOWID>Ctc47439557</PAY_FLOWID><ACCOUNT_ID>2741002744574</ACCOUNT_ID><DeviceNO>57481138197</DeviceNO>
<USER_NAME>宁波市鄞州**建筑装饰有限公司</USER_NAME><InvoiceCode /><BILL_Cycle>201010</BILL_Cycle>
<BILL_Charge>438.84</BILL_Charge><InvoiceItemNum>8</InvoiceItemNum>
<Item_Info>月基本费:35|增值业务费:81|本地话费:130.6|互联网使用费:150|优惠(补足)费:-15|违约金:57.24|本期费用小计:438.87|预存款支付:0
</Item_Info></re_DataSet><re_DataSet diffgr:id="re_DataSet3" msdata:rowOrder="2" diffgr:hasChanges="inserted">
<PAY_FLOWID>Ctc47439557</PAY_FLOWID><ACCOUNT_ID>2741002744574</ACCOUNT_ID><DeviceNO>57481138197</DeviceNO>
<USER_NAME>宁波市鄞州**建筑装饰有限公司</USER_NAME><InvoiceCode /><BILL_Cycle>201011</BILL_Cycle>
<BILL_Charge>305.49</BILL_Charge><InvoiceItemNum>8</InvoiceItemNum>
<Item_Info>月基本费:35|增值业务费:81|本地话费:35.4|互联网使用费:150|优惠(补足)费:-12.4|违约金:16.49|本期费用小计:305.52|预存款支付:0
</Item_Info></re_DataSet><re_DataSet diffgr:id="re_DataSet4" msdata:rowOrder="3" diffgr:hasChanges="inserted">
<PAY_FLOWID>Ctc47439557</PAY_FLOWID><ACCOUNT_ID>2741002744574</ACCOUNT_ID><DeviceNO>57481138197</DeviceNO>
<USER_NAME>宁波市鄞州**建筑装饰有限公司</USER_NAME><InvoiceCode /><BILL_Cycle>201012</BILL_Cycle>
<BILL_Charge>289.02</BILL_Charge><InvoiceItemNum>9</InvoiceItemNum>
<Item_Info>月基本费:35|增值业务费:81|互联网使用费:150|优惠(补足)费:23|上期零头:0.03|本期费用小计:289.03|本期未收零头:0.01|预存款支付:0|现金支付:0
</Item_Info></re_DataSet><re_SearchResult diffgr:id="re_SearchResult1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
<ID>0</ID><Msg>销账成功</Msg></re_SearchResult></NewDataSet></diffgr:diffgram>
简单点说就是:如何截取字符串“<PAY_FLOWID> xxxx </PAY_FLOWID><PAY_FLOWID> xxxx</PAY_FLOWID> 中 < XXX >放入数组中。 是在linux环境下用c写的。。。

在程序当前目录下建一个txt文件bill.txt,文件内录入以下内容:

<pay_flowid>CTC4789</pay_flowid>

<>嗨,百度知道<dd>

<he和> hello linux

运行程序后在当前目录下生成str.txt文件,可以提取。

程序代码如下:

#include <stdio.h>

#include <string.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#define LEN 100                  /* 字符数,可以根据需要自己定义 */

int main(void)

 int fd;

 long len,i,flag,j;

 char num[LEN],string[LEN];

 fd = open("bill.txt",O_RDWR);

 len = read(fd,num,LEN);    /* read string for bill.txt */

 num[len] = '\\0';

 close(fd);

 for(i=0,j=0;i<len;i++)

 

  switch(num[i])

  

   case '<':

   

    flag=1;

    break;

   

   case '>':

   

    flag=2;

    break;

   

   default:

   

    if(flag==2)

    

     string[j]=num[i];

     j++;

    

   

  

 

 string[j] = '\\0';

 fd = open("str.txt",O_RDWR|O_CREAT,S_IRUSR|S_IWUSR);

 if(fd)

 

  write(fd,string,j);

  close(fd);

 

 return 0;

参考技术A 和楼上的思路差不多,先判断'<'获取当前,然后取index + sizeof("PAY_FLOWID>"),如果为真,取后面的字符串。再放入数组就容易了。 参考技术B s[i]是字符,应该用%c,而s+i是指针型数据,与字符串是一个类型,可以用%s。 参考技术C 222

怎样用JAVA把 文件中的字符串 放到 一个数组中

假设有文件:a.txt

内容为:

name,age,sex

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;

public class $ 

    public static void main(String[] args) 
        Scanner in = null;
        try 
            in = new Scanner(new File("D:/a.txt"));

            String result = "";
            while (in.hasNextLine()) 
                result += in.nextLine();
            

            String[] arr = result.split(",");

            System.out.println(Arrays.deepToString(arr));
         catch (FileNotFoundException e) 
            e.printStackTrace();
         finally 
            if (in != null) 
                in.close();
            
        
    

结果:

[name, age, sex]


参考技术A 读文件,按空格把字符串分开存进数组 参考技术B 问题描述的不清楚,字符串什么格式?

以上是关于linux C 截取字符串放到数组中的主要内容,如果未能解决你的问题,请参考以下文章

C语言截取字符串

C 语言中怎么截取字符串的一部分

如何截取两个字符之间的字符串

c语言截取字符串中的一部分

linux 中如何截取2个字符串中间的字符?

C语言截取字符串的第一个字符