vc++ 怎直接调用split 分割字串,这不能complier

Home Home
引用 | 编辑 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
引用 | 编辑 yakin999
2009-09-06 13:35
2楼
  

图 1.


我程用的strtok 这段
但 卡在 strtok 只能处理 char 型态
我要找 方法 string 转 char 不行

用过string.c_str()
也挂点 string.c_str转出为 const char 常数
与char 不同,不能作运算!

请高手帮帮忙!!!


c++ 真的这难用吗?


我看c# or vb 很好读文字 档


------------------文字档格式
A B
T1
T2

------------------


献花 x0
引用 | 编辑 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
引用 | 编辑 leacks
2009-09-15 08:23
5楼
  
你是要以啥当分界点分?
看你的程式是要以空白来分??

献花 x0