2012-03-01 5 views
0

파일의 내용을 2D 배열로 읽는 중입니다. 파일 형식이 다음과 같습니다.입력란을 쉼표로 구분하기

FirstName,Surname 
FirstName,Surname 

등이 있습니다. 이는 숙제이며 모든 사람이 이름과 성을 가지고 있다고 가정 할 수 있습니다.

나는 그것이 같을 것이다 차원 배열 있도록 쉼표를 사용하여 라인을 분할 가겠어요 방법 :

char name[100][2]; 

내가 정말하고 나오지 않았어 고민하고

 Column1  Column2 
Row 0 FirstName Surname 
Row 1 FirstName Surname 

로 내가 이해할 수있는 도움을 찾지 못한다.

+1

누구나 성 (姓)과 성 (姓)이 없기 때문에 숙제가되기를 바랍니다. –

+0

숙제가 아닌 경우 스크립팅 언어를 사용하지 않으시겠습니까? –

+0

가능한 복제본 [C에서 공백으로 문자열 분할] (http://stackoverflow.com/questions/323285/splitting-a-string-by-space-in-c) –

답변

5

strtok을 사용하여 구분 기호를 기준으로 문자열을 토큰화한 다음 name 배열로 반환 된 토큰에 대한 포인터를 사용할 수 있습니다.

또는 strchr을 사용하여 쉼표의 위치를 ​​찾은 다음 memcpy을 사용하여이 지점 전후의 문자열 부분을 name 배열에 복사 할 수 있습니다. 이 방법은 또한 초기 문자열을 보존 할 것이고 strtok과 같은 방법으로 그것을 맹독하지 않을 것입니다. 또한 strtok을 사용하는 것보다 스레드로부터 안전합니다.

참고 :strtok에 대한 스레드로부터 안전한 대안은 strtok_r이지만 POSIX 표준의 일부로 선언되었습니다. 해당 기능을 사용할 수없는 경우 사용자 환경에 대해 정의 된 유사한 기능이있을 수 있습니다.

편집 : 대신 일치하지 않는 문자 세트 지정자를 사용해야 할 것 또 다른 방법은 sscanf을 사용하는 것입니다, 그러나 당신은 첫 번째 문자열의 %s 형식 지정자를 사용할 수 없습니다 (',')에 대해 그것이 숙제이기 때문에 (그리고 정말로 간단하게) 나는 그것을 당신이 이해하도록 할 것입니다.

EDIT2 : 또한, 어레이는 두 개의 스트링 어레이를위한 char name[2][100] 크기 100 개 char들 각각이어야한다. 그렇지 않으면, 당신이 가지고있는 방식대로, 당신은 100 문자열의 배열을 가지고, 각각 2 char의 크기입니다.