2010-04-10 3 views
0

내 목표는 로봇을 이동하기 위해 사용자와 텍스트 파일의 지시를받는 것입니다. catch는 std :: string보다는 Cstrings (예 : char word [];)을 사용해야하고이를 토큰 화해야합니다.Cstring에서 다음 토큰을 int로 사용하려면 어떻게해야합니까? (C++)

코드는 다음과 같습니다

void Navigator::manualDrive() 
{ 

    char uinput[1]; 
    char delim[] = " "; 
    char *token; 

    cout << "Enter your directions below: \n"; 
    cin.ignore(); 
    cin.getline (uinput, 256); 

    token=strtok(uinput, delim); 

    if(token == "forward") 
    { 
     int inches; 
     inches=token+1; 
     travel(inches); 
    } 
} 

내가 전에 아무것도 토큰 화 된 적이 없어, 나는이 작성하는 방법을 모르는 Cstrings을 사용한 적이 없으니까. 우리의 T.A.는 우리가이 방법을 결코 배우지 못했다는 것을 알고 있기 때문에 우리가 google에 모든 대답을 찾을 것을 기대합니다. 내 연구실의 모든 사람들은 평소보다 훨씬 어려움을 겪고 있습니다.

필자는 작성할 코드를 모르지만 내 프로그램에서 수행 할 내용을 알고 있습니다.
다음과 같이 실행하고 싶습니다.

1) 길 찾기를 요청하십시오. 첫 번째 단어 토큰 ==는 다음 토큰에 대한 "앞으로"이동 및 다음 앞으로
를 이동 앞으로 이동하는 방법을 몇 인치 찾을 경우
2) 토큰 화)에 inputed 문자열
4) 사용자 입력
3 cin.getline 5) 첫 번째 토큰이 == "turn"이면 다음 토큰으로 이동합니다. 다음 토큰 == "left"가 다음 토큰으로 이동하여 왼쪽으로 돌아갈 각도를 확인하십시오.

앞으로 x, 뒤로 x, 왼쪽 x, 오른쪽 x, 멈춤을 위해 이것을해야합니다 (x는 인치 또는도). 저는 이미 로봇에게 앞으로 움직여서 각도를 돌리는 방법을 로봇에게 알려주는 함수를 작성했습니다. 입력 된 문자열을 모두 소문자로 변환하고 토큰에서 토큰으로 이동하여 문자열에서 숫자를 변환하여 정수로 사용하는 방법을 알아야합니다. 아무것도 알려 주시기 바랍니다 명확하지 않다 http://www.cs.utk.edu/~cs102/robot_labs/Lab9.html
경우, 나는 최선 내가 할 수있는 명확합니다 : 모두가 명확하지 않으면

당신은 내 연구실이 링크에서 쓸 읽을 수 있습니다.

+0

정말 C 질문입니까? – ben

+0

James, 전체 페이지를 읽어보십시오. "당신은 cstring과 그 부속 라이브러리를 사용할 것입니다. [...]이 문제를 해결하기 위해 C++ 문자열 메소드 이외의 것을 사용할 수 있습니다." C++ 문자열 라이브러리는 사용할 수 없습니다. –

+0

나는 즉시 대답 한 모든 사람들에게 감사 드리고 싶습니다. 나는 나의 문제를 그렇게 빨리 해결할 것을 기대하지 않았다. 모두에게 다시 한 번 감사 드리며 제 질문에 답변했습니다. 조만간 답변을 등록하고 로그인하겠습니다. – Van

답변

0
  1. 낮은 것으로 변환하려면 tolower을 사용할 수 있습니다. 한 번에 한 문자 씩 처리하므로 간단한 루프가 필요합니다.
  2. 문자열을 정수로 구문 분석하려면 strtoll을 사용할 수 있습니다.
  3. 다음 토큰으로 이동한다는 것은 strtok (이 경우 if 문 내부)을 다시 호출하는 것을 의미합니다.
0

문자열을 소문자로 변환하려면 tolower()을 사용할 수 있습니다. tolower은 단일 문자에서 작동하므로 문자열을 반복하여 모든 문자에 적용해야합니다.

문자열을 숫자로 변환하려면 strtol, strtoul 또는 기타 관련 기능을 사용하십시오.

0

다음 토큰을 얻기 위해 strtok을 다시 호출하기 만하면됩니다.

아마도 입력 체크가 필요합니다.

은 일반적으로 내가 CString을에 대해 뭔가 말할 수는 없지만

token=strtok(uinput, delim); 
while (token != NULL) 
{ 
    // use token 

    //go to next token 
    token=strtok(uinput, delim); 
} 
0

, 나는 코드에서 스택 오버플로 오류를 발견 while 루프를 사용하는 것이 다음 값이 있는지 확인합니다 :

 
{ 
    char uinput[1]; // <- Here you define a one byte large buffer on the stack 
    char delim[] = " "; 
    char *token; 

    cout << "Enter your directions below: \n"; 
    cin.ignore(); 
    cin.getline(uinput, 256); // and here you put up to 256 bytes into it 

나는 있습니다 sugest 것이다 :

 
{ 
    const int bufSize = 42; // since 42 is the awnser to everything 
    char uinput[bufSize]; 
    // ... 
    cin.getline(uinput, bufSize); 
+0

내가 확실히 그렇게 할 것이라는 제안에 감사드립니다. – Van

+0

와 나는 은하계 암시에 관한 히치하이커의 가이드에서 luled했다. – Van

관련 문제