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