2015-01-19 7 views
-2

나는 bash와 같은 기본 터미널을 구현하려고하는데, 현재는 (bash에서 명령을 입력하는 것처럼) 사용자 입력을 받아들이려고하고 있으며, 각각 공백으로 나눠서 벡터에 넣으려고합니다. 나는 벡터로부터 읽고 각 명령을 하나씩 살펴볼 수있다. 내 코드를 컴파일 할 수없는 것 같은데, 내가 뭘 잘못하고 있니? (여기서 내가 지금까지 가지고 무엇을) :strtok() C++ strtok()을 사용하여 문자열을 분할하고 각 부분을 벡터에 넣으려면 어떻게해야합니까?

#include <iostream> 
#include <cstring> 
#include <vector> 
#include <string> 
using namespace std; 

int main(){ 
    vector<string> cmdline; 
    string command = ""; 
    cout << '$'; 
    getline(cin, command); 

    command.c_str(); 
    char* tokchar; 
    tokchar = strtok(command, " "); 


    while(tokchar){ 
     cmdline.push_back(tokchar); 
     tokchar = strtok(NULL, " "); 
    } 
return 0; 
} 

특히, 컴파일러 오류는 다음과 같습니다 * strtok를 (숯불 * const가 문자 문자 '에 인수 1'의 char * '에'표준 : : 문자열을 '변환 할 수 없습니다 *) ' 오류는 내가 설정 한 행에 있다고합니다. tokchar = ...;

이 코드가 내가 원하는 것을 수행 할 수 있는지 확실하지 않습니다. 어떻게 수정하고 모든 명령 행 인수를 ""로 구분 된 벡터에 넣을 수 있습니까?

답변

0

C보다 관용적 인 함수가있는 C++ 유형을 사용하고 있습니다. C++의 경우 boost::split을 고려하십시오.

의 모든 :

char* tokchar; 
tokchar = strtok(command, " "); 


while(tokchar){ 
    cmdline.push_back(tokchar); 
    tokchar = strtok(NULL, " "); 
} 

에 의해 (오류없이) 대체 될 수 :

제 컴파일러는 "부스트가 선언되지 않았습니다"라는
boost::split(cmdline, command, boost::is_any_of(" ")); 
+0

, 나는 C++ 11 선으로 컴파일해야합니까? –

+0

@TristanZickovich C++ 03 이상이 작동합니다. 제공된 링크에서 자세한 내용을 읽을 수 있지만'#include '가 시작됩니다. 행운을 빕니다! –