引用 | 编辑
yakin999
2009-09-04 11:53 |
楼主
▼ |
||
x0
// book001.cpp : 定义主控台应用程式的进入点。// // vc++ 怎直接调用split 分割字串? //我想用split 直接用 #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { return 0; } int main(int argc, char *argv[]) { string inputFileName; string ; string sample; string tran_sample; ifstream inputFile; if (argc>0){ inputFileName=string (argv); }else{ cout << "输入要开启的档名(包含副档名 .. 访客只能看到部份内容,免费 加入会员 x0
|
引用 | 编辑
teldeanmac85
2009-09-04 19:14 |
1楼
▲ ▼ |
写一个sample给你参考看看
你可以试一下 复制程式 #include <stdio.h> #include <string.h> int main () { char str[] ="- This, a sample string."; char * pch; printf ("Splitting string \"%s\" into tokens:\n",str); pch = strtok (str," ,.-"); while (pch != NULL) { printf ("%s\n",pch); pch = strtok (NULL, " ,.-"); } return 0; } x1 |
引用 | 编辑
teldeanmac85
2009-09-07 13:50 |
3楼
▲ ▼ |
以下你可以试看看
我有写一个函式split 复制程式 #include <iostream> #include <fstream> #include <string> #include <iomanip> #include <vector> using namespace std; typedef vector<string> vstring ; void split(vstring &szRet,string szStr,const char *del) { char *czStr = new char [szStr.size()+1]; //char szBuf[1024] = {'\0'} ; strcpy(czStr,szStr.c_str()); char *s = strtok(czStr,del); int cnt = 0 ; while( s != NULL ){ szRet.push_back(s) ; s = strtok(NULL, del); } delete [] czStr ; } int main(int argc, char* argv[]) { unsigned int i ; string inputFileName; string sample; string tran_sample; ifstream inputFile; if (argc>1){ inputFileName=string (argv[1]); } else{ cout << "输入要开启的档名(包含副档名):"; cin >> inputFileName; } inputFile.open (inputFileName.c_str(),ios::in); //检查开启的档案是否正确 while(inputFile.fail()) { inputFile.clear(); cout << "查无此档,请重新输入:"; cin >> inputFileName; inputFile.open (inputFileName.c_str()); } //显示输入的档案内容 string line ; long int lcount = 0 ; vstring word ; bool ret = false; while ( 1 ) { getline( inputFile , line ) ; if ( ! inputFile ) break ; ++lcount ; cout << setw(5) <<lcount << " : " << line << endl ; switch(lcount%3) { case 1: word.clear() ; split(word,line," "); for(i=0;i<word.size();i++){ cout<<word[i]<<endl; } break; case 2: break; case 0: cout <<"---------------\n"; break; } } inputFile.close(); return 0; } x0 |
引用 | 编辑
totsi
2009-09-08 16:56 |
4楼
▲ ▼ |
我这边有最笨的方法来处理string的split,当然char* 也可以用同样方式处理,只是效率应该是不高啦XDDDD
关于2楼的问题,应该在function内部把string copy到另外一个char []来处理应该就解决了吧?只是buffer可能要开大一点,如果是静态的话。 不一定要把string塞给strtok阿 ^^m 复制程式 vector<string> Split(char cHyphen, string InStr) { vector<string> vstrSplitData; string strtmp = ""; for ( unsigned int i = 0 ; i < InStr.Length() ; i++ ) { if ( InStr[i] != cHyphen ) { strtmp += InStr[i]; }else{ vstrSplitData.push_back(strtmp); strtmp = ""; } } if (strtmp != "") { vstrSplitData.push_back(strtmp); }; //最后一个区间 return vstrSplitData; } x1 |