2012-11-06 2 views
1

내가
말 배열을 나타내는 문자를 사용하려면 배열의 인덱스 표현을 변경 C 나는이 해시 테이블 와 함께 자바에서 수행 할 수 있다는 것을 알고 내가 각 문자열 를 참조하는 포인터의 배열을 사용하여 생각하고, 내가 대신 내가 편지를 대표 할 첫 번째 문자열을 나타내는 인덱스 0의</p> <pre><code>char arrays[50]={"hello", "world"}; </code></pre> <p>이

C에서이 가능하지만 내가 어떻게 그것을 구현하는 아무 생각이 없다 내가 방금 배우기 시작한 큰 배열 g
뭔가

char *a: 
arrays[0]=&a; 
+1

무엇이 당신의 질문입니까? 질문은 매우 불분명합니다 ... 무엇을 알고 싶습니까 – Anirudha

+0

당신은 Java와 같은지도를 사용할 수 있으며 값으로 정수를 얻을 수 있습니다. – logoff

+0

그것은'char'와'char * '사이의 매핑입니까? – hmjd

답변

0

같은 포인터의 사용 그것은이 지금이 문자열

*(arrays[0]+0) 또는 arrays[0][0] 처음 참조 할 가리키는 두 문자 포인터의 배열입니다

char *arrays[2]={"hello", "world"}; 

해야한다 문자 : 1st 문자열

*(arrays[0]+1) 또는 arrays[0][1]

*(arrays[1]+0) 또는 arrays[1][0]

*(arrays[1]+1) 또는 arrays[1][1]2nd 문자열의 두 번째 문자를 참조합니다 2nd 문자열의 첫 번째 문자를 참조합니다 1st 문자열의 두 번째 문자를 참조합니다

0

당신이 할 수있는 또한 enum을 사용하십시오.

http://msdn.microsoft.com/en-us/library/whbyts4t%28v=vs.80%29.aspx

enum DAY   /* Defines an enumeration type */ 
{ 
    saturday,  /* Names day and declares a  */ 
    sunday = 0,  /* variable named workday with */ 
    monday,   /* that type      */ 
    tuesday, 
    wednesday,  /* wednesday is associated with 3 */ 
    thursday, 
    friday 
} workday; 
0
char *a[50]={"Hello", "World"}; 

char *a[256]={ ['H'] = "Hello", ['W'] = "World"}; \\ c99 -extension 

문자는 배열을 인덱싱하는 데 완벽하게 유효한 유형입니다. 최소한 첫 128 요소. 음수 값으로 해석되지 않는 다음 128 요소의 경우 char은 부호가 없어야합니다.

+0

특히 해킹이기 때문에 그리고이 게시물을 시작한 사람이 방금 C 포인터를 배우기 시작했기 때문에 나는 이것에 동의하지 않습니다. 이것은 초보 프로그래머에게는 좋은 조언이 아닙니다. 귀하의 해킹에서, 당신은 "고정"키 (각 ASCII 위치에 하나씩)를 사용하여 256 개의 메모리 위치를 할당하고 있습니다.이 경우 2 개만 필요합니다. 또한, 사용하지 않을 몇 가지 ASCII 값이 있습니다. 이 범위를 256에서 87 (ASCII 코드는 'W')로 변경하여이 범위를 제한 할 수 있지만 'w'(ASCII 코드 119) 또는 다른 값을 사용할 수 없으므로 다시 제한됩니다. –

1

당신이 한 쌍 들어있는 간단한 struct 만들 수 있습니다 요구되는 char와 문자열 (char*) 간의 매핑의 경우 :지도의 내용이 컴파일 타임에 알려진 경우

struct entry 
{ 
    char key; 
    const char* value; 
}; 

가 다음 :

: 항목을 유지하여

const struct entry map[] = 
    { 
     { 'a', "a.text" }, 
     { 'b', "b.text" }, 
     { 'c', "c.text" }, 
     { 'd', "d.text" }, 
     { 'e', "e.text" } 
    }; 

당신이 항목을 찾을 수 bsearch()를 사용할 수있는 명령

http://ideone.com/x6roRm에서 데모를보십시오.

0

우선 문자열 배열 선언이 잘못되었습니다.GCC에서이 다음과 같은 오류를 제공합니다 :

error: excess elements in char array initializer   
error: (near initialization for ‘arrays’) 

는 50 개 요소 (각 요소는 문자입니다) 그리고 당신이 문자열을 초기화하는과 하나 문자 문자열을 선언 때문이다.

이제 당신은 당신이 당신의 배열이 포인터가 말하는

char *arrays[2] = {"hello", "world"}; 

로 변경 경우 : "안녕하세요"문자열에 하나의 포인터 점, 그리고 문자열 "세계"에 다른 포인터. 당신이 그들이 가리키는 값 인쇄하여 사실입니다 볼 수 있습니다 :이 대신 수의 문자가 인덱스에 지금 당신이 원하는 경우에

array content: hello - world 

를 인쇄합니다

printf("array content: %s - %s\n", arrays[0], arrays[1]); 

을, 나는 가장 간단한 생각 접근법은 원하는 문자열에 문자 키를 할당 할 수있는지도를 만드는 것입니다. hmjd가 제공 한 답변을 참조하십시오 (은 stdlib.h으로 표시되므로 소스 코드에이 헤더를 포함해야합니다).

귀하의 의심이나 어려움을 가지고 계시다면, 우리가 도울 수 있다고 확신합니다.

관련 문제