2012-07-24 3 views
0

문자열의 일부분을 얻는 방법.문자열의 일부분을 얻는 방법

예를 들어, 문자열 :

입력 스트링 "53 56 (b) 00 00 41 41 층 41 54 43 43 54 52 31 (2E) 41 54 31 2E 4E 37 38"

   |          | 
       ptr1          ptr2 

ptr1는 항상 왼쪽에서 오른쪽으로 시작하는 7 위치에있을거야

,536,913 63,210

ptr2는 항상

출력 문자열을 오른쪽에서 왼쪽으로 시작하는 13 위치에있을거야 : 당신이 std::string를 사용할 수 있다면, 당신은 substr 방법을 사용할 수 있습니다

4B 00 00 41 41 2F 41 54 43 43 54 52 31 2E 41 54 31 
+0

이 숙제가 있습니까? –

+0

태그가 지정되었습니다. C; 'std :: string'을 사용하고 있습니까? – chris

+0

예 ... 다 괜찮을 것입니다 .... 아무리 그 char * 또는 문자열 – Jatin

답변

4

:

std::string result(ptr1, ptr2 - ptr1); 

또는 포인터는 반복자로 사용될 수 있기 때문에 당신이 이중 반복자 생성자 사용할 수 있습니다, 의견에서 지적

C에서

char substr[MAX_LEN + 1]; 

strncpy(substr, input + 6, MAX_LEN); 
substr[strlen(substr) - 12] = '\0'; 

를 ++ :

substr = input.substr(6, input.size() - (6 + 12)); 

이것은 입력 문자열에 오류 처리를하지 않습니다.

2

.

5

이미 포인터가있는 경우 매우 간단합니다. 포인터와 길이를 취하는 std::string constructor을 사용하십시오. C에서

std::string result(ptr1, ptr2); 
+1

'ptr2 - ptr1'을 단순히'ptr2'로 변경할 수 있습니다. 반복기 버전을 사용하게 될 것입니다.이 버전은 제 C++ 감성에 훨씬 더 매력적입니다. –

+0

@BenjaminLindley, 왜 그렇게 생각하지 않았습니까? 내 대답을 업데이트했습니다. –

1

std::string.substr 기능을 사용하십시오. 이 목적을 위해 desingned입니다.

두 가지 사항이 필요합니다. 첫 번째 항목은 "추출"을 시작할 위치의 색인이고 두 번째 항목은 "추출 된"문자의 개수입니다.

예 :

string hello = "Hello World"; 
string part = hello.substr(6, hello.size() - 6); // part == "World" 

그래서, 당신은 내가 < = J, j-i에서 문자열, 포괄적가에서

string part = original.substr(i, j - i + 1); 
1

에 의해 발견 될 두 굴절률들 ij가있는 경우 C, 입력 문자열을 수정하지 않고 :

char *ptr1,*ptr2; 
if(strlen(instring)<13) { /** error; not long enough **/ } 
ptr1 = instring+7; 
ptr2 = instring+strlen(instring)-13; 

여기서 포인터는 입력 문자열의 한 위치를 가리 킵니다. 원래 입력 문자열을 수정하지 않고 수정해야하는 경우 strncpy을 사용하십시오.

1

나는 당신의 ptr1과 ptr2가 뒤로 또는 왼쪽/오른쪽으로 섞여 있다고 생각합니다.하지만 오른쪽에서 X 위치를 얻으려면 X의 위치에 도달 할 때까지 문자열의 마지막 요소에서 반복하고, X가 왼쪽에서 얼마나 멀리 떨어져 있는지 계산 한 다음 string.substr()을 사용합니다.

http://www.cplusplus.com/reference/string/string/substr/

관련 문제