2017-10-10 13 views
2

저는 커맨드 라인 인터페이스에서 일하고 있습니다. 사용자는C++에서 동일한 문자열에 대해 string.substr (x, y)를 여러 번 사용할 수 없습니까?

add -s TITLE ARTIST 

add -a TITLE ARTIST 

이되는 -a 플래그에 "앨범"을 추가 할 이것은 -s의 국기와 함께 "노래"를 추가 것 명령 등

로 입력 다른 플래그와 같은 다른 명령은도 삭제합니다.

명령 및 플래그를 평가하기 위해이 작업을 수행했지만 나머지 문자열을 가져 오는 데 문제가 있습니다. 사용자 입력은 문자열로 변환되는 char의 배열로 사용됩니다.

if (inputString.substr(0, 3) == "add"){ 
    if (inputString.substr(4, 5) == "-s"){ 
     cout << "TEST: ADD SONGS" << endl; 
     //PROBLEM IS THIS LINE 
     cout << inputString.substr(6, MAX_LENGTH) << endl; 
    } 

언제든지 + 동작 플래그가 표시되면 나머지 문자열을 사용하여 실제로 데이터베이스에 정보를 추가하는 새로운 기능을 실행하고 싶습니다.

입력 할 때 아무런 문제가 없습니다. add -s 프로그램은 첫 번째 문자를 평가하여 노래를 추가하려고한다는 것을 알고 있습니다. 그러나 "add -s "Sorry" "Justin Bieber""과 같이 더 입력하면 프로그램에서 add -s 플래그가 실행되었음을 확인하지 못합니다.

누군가가 이것을 왜 변경할 수 있습니까? .

+0

참고로,이 작업을 직접하는 것은 모든 상처를 입히는 것입니다. [Getopt] (https://en.wikipedia.org/wiki/Getopt)와 같은 라이브러리 사용을 고려 했습니까? C로 보편적입니다. – tadman

+0

[mcve]로 질문을 많이 향상시킬 수 있습니다. 디버거에서 무엇을 관찰 했습니까? – Tas

+0

문자열 분할 알고리즘을 사용하는 것이 좋습니다. https://stackoverflow.com/questions/236129/most-elegant-way-to-split-a-string – Galik

답변

1
if (inputString.substr(4, 5) == "-s"){ 

substr()의 두 번째 매개 변수는 문자 수입니다. 이는 문자열에서 5 자 (최대)를 추출하고, 좀 더 같은 "로 입력하지만 경우 오프셋 4.

에서 시작 add -s "Sorry" "저스틴

좋아, 손가락을 사용하여 4를 오프셋하기 위해 실제로 '-'문자를 사용합니다. 그런 다음 해당 위치에서 시작하는 5 자의 문자를 추출하면 다음 문자열에 도달합니다.

-s "S 

5 문자로 계산됩니다. 그것이 substr()가 반환 한 것입니다. 문자열 "-s"와 같음을 비교하는 것은 분명히 실패합니다.

일부 디버깅 기술을 익힐 수있는 편리한 기회입니다. 이 같은 추가했다 : 두 번째 if 문 앞에

std::cout << inputString.substr(4, 5) << std::endl; 

오른쪽, 당신이 자신에 의해 모든이 아웃 낸 것입니다 확신합니다.

+0

고마워요, 왜 항상 두 번째 생각했는지 모르겠어요. substr에 대한 매개 변수가 두 번째 위치입니다. – user1692517