亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問板塊 發(fā)新帖
查看: 9234 | 回復(fù): 10
打印 上一主題 下一主題

如何快速高效分割字符串 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-03-30 13:22 |只看該作者 |倒序?yàn)g覽
初次學(xué)習(xí)c++,寫了如下程序,來分割字符串。請(qǐng)大伙兒給指點(diǎn)指點(diǎn)。
要讀取的文件格式如下:
a|b|c|d|10|12
b|c|d|e|11|13
c|d|e|f|12|14
A|B|C|D|10|12
程序如下:
#include <iostream>
#include <string>
#include <fstream>

using namespace std;
struct line {
&nbsp;&nbsp;&nbsp;&nbsp;string key1;
&nbsp;&nbsp;&nbsp;&nbsp;string key2;
&nbsp;&nbsp;&nbsp;&nbsp;string key3;
&nbsp;&nbsp;&nbsp;&nbsp;string key4;
&nbsp;&nbsp;&nbsp;&nbsp;int val1;
&nbsp;&nbsp;&nbsp;&nbsp;int val2;
};

line explode(string str) {
&nbsp;&nbsp;&nbsp;&nbsp;line buf;

&nbsp;&nbsp;&nbsp;&nbsp;buf.key1 = strtok((char*)str.c_str(), "|");
&nbsp;&nbsp;&nbsp;&nbsp;buf.key2 = strtok(NULL, "|");
&nbsp;&nbsp;&nbsp;&nbsp;buf.key3 = strtok(NULL, "|");
&nbsp;&nbsp;&nbsp;&nbsp;buf.key4 = strtok(NULL, "|");

&nbsp;&nbsp;&nbsp;&nbsp;string tmp = strtok(NULL, "|");
&nbsp;&nbsp;&nbsp;&nbsp;buf.val1 = atoi(tmp.c_str());
&nbsp;&nbsp;&nbsp;&nbsp;tmp = strtok(NULL, "|");
&nbsp;&nbsp;&nbsp;&nbsp;buf.val2 = atoi(tmp.c_str());

&nbsp;&nbsp;&nbsp;&nbsp;return buf;
}

int main(int argc, char* argv[]) {

&nbsp;&nbsp;&nbsp;&nbsp;ifstream in(argv[1]);
&nbsp;&nbsp;&nbsp;&nbsp;string strtmp;
&nbsp;&nbsp;&nbsp;&nbsp;line tmp;

&nbsp;&nbsp;&nbsp;&nbsp;while (getline(in, strtmp, 'n')) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp = explode(strtmp);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout << tmp.key1 << "|" << tmp.key2 << "|" << tmp.key3 << "|" << tmp.key4 << "|" << tmp.val1 << "|" << tmp.val2 << endl;

&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;return 0;
}


定義了一個(gè)結(jié)構(gòu)體,按行讀取文件,按“|”分割每行的內(nèi)容,存入結(jié)構(gòu)體中。
如何來優(yōu)化此程序呢?
感覺c++的字符處理很麻煩,亦或者是我還沒掌握好吧,請(qǐng)大家指教一二。

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2009-03-30 13:40 |只看該作者
不用strtok函數(shù),一個(gè)字符一個(gè)字符比較不行么?

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2009-03-30 14:03 |只看該作者
有可以直接用的函數(shù)d

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2009-03-30 14:18 |只看該作者

回復(fù) #3 gobbin 的帖子

which one ?

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2009-03-30 15:05 |只看該作者

回復(fù) #2 gawk 的帖子

遇到空格或者指定字符就返回,是么?

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2009-03-30 15:08 |只看該作者
分割字符串用strtok已經(jīng)足夠高效了
字符處理當(dāng)然麻煩,不用stl string的話,保存變長(zhǎng)字符串更麻煩
只是為了完成字符處理的功能,或者完成一個(gè)任務(wù),完全可以用perl, php等好用的東西

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2009-03-30 15:12 |只看該作者
文件格式這么簡(jiǎn)單,可以直接用char*指針指。。

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2009-03-30 15:12 |只看該作者

回復(fù) #6 Strange 的帖子

這只是第一步處理,完成以后還需要其他處理,后繼的沒有列出來呀

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2009-03-30 15:15 |只看該作者
C分割字符串,這應(yīng)該是比較好的辦法了

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2009-03-30 15:18 |只看該作者
用C的格式化輸入,很簡(jiǎn)單的

  1. #include <stdio.h>
  2. int main(int argc,char* argv[])
  3. {
  4.         char x1[100],x2[100],x3[100],x4[100],x5[100],x6[100];
  5.         char a[] = "a|b|c|d|10|12";
  6.         char *p;
  7.         for (p=a;*p!='\0';p++)
  8.                 if (*p=='|')
  9.                         *p=' ';
  10.         sscanf(a,"%s %s %s %s %s %s",x1,x2,x3,x4,x5,x6);
  11.         printf("%s,%s,%s,%s,%s,%s",x1,x2,x3,x4,x5,x6);
  12.         return 0;
  13. }

復(fù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP