이것은 프로그래밍 언어와 관련하여 C
입니다.C에서 문자열 연결과 관련된 문제
많은 수의 2D 배열 (sizes are not fixed
)이 있습니다. 다음 예제를 고려하십시오.
bool sym_a[][]={{...},{...},...}; //consider these are initialized properly
bool sym_b[][]={{...},{...},...};
...
bool sym_z[][]={{...},{...},...};
bool sym_0[][]={{...},{...},...};
bool sym_1[][]={{...},{...},...};
...
bool sym_9[][]={{...},{...},...};
...
모든 이름은 모두 같습니다. 배열 이름의 마지막 문자 만 변경됩니다 (두 개 이상의 문자가 될 수 있지만 중요하지는 않은 경우 더 좋습니다).
이제는 기능이 있습니다. 전달 된 인수에 따라 해당 2D 배열 중 하나를 선택합니다. 그런 다음 선택한 배열로 작업을 수행하십시오. 작업은 일반적인 작업이며 선택한 배열 만 변경됩니다.
예를 들어, 내가 현재 생각할 수있는 것에 따르면 예 스위치 케이스의 경우 아래와 같은 기능을 구현할 수 있습니다.
void doStuff(char letter){
switch(letter){
case 'a':
sym_a[0][0]=1; //just for demonstration :D
break;
case 'b':
sym_b[0][0]=1; //same thing, only the character 'a' changed to 'b'
break;
...
case 'z':
sym_z[0][0]=1;
break;
case '0':
sym_0[0][0]=1;
break;
case '1':
sym_1[0][0]=1;
break;
...
...
}
}
그러나 더 좋은 방법이 있어야합니다. 1000 개 배열이 있다면 1000 개를 써야합니까 ?? 모든 경우에 대해 내용은 완전히 동일합니다. 변수 이름의 한 문자 만 변경됩니다.
문자열 연결과 같은 것이 있으면 좋을 것입니다.
#define conc(a,b) a ## b
그런 다음 conc(sym_,a)
은 sym_a
입니다. 하지만 여기서는 직접 적용 할 수 없습니다. 정확한 문자를 conc(a,b)
의 오른쪽 인수에 전달할 수 없기 때문에 원하는 문자가 들어있는 변수 만 전달할 수 있습니다.
void doStuff(char letter){
conc(sym_,letter)[0][0]=1;
}
conc(sym_,letter)
는 sym_letter
을 제공합니다. 하지만 sym_
을 문자 변수 letter
의 내용과 연결해야합니다.
예를 들어, doStuff('b');
으로 전화를 걸면 대신 sym_letter
을 입력해야합니다.
희망 사항은 분명합니다. 이 일은 매우 단순 해 보이지만 이것을 제거하는 방법을 생각할 수는 없습니다. 2D 배열의 크기 (행/열 수)는 고정되어 있지 않습니다. 그렇지 않으면 3D 배열을 사용할 수있었습니다.
모든 의견을 환영합니다.
왜 이렇게 많은 2D 변수가 항상 필요합니까? – akshay202
C 언어에는 bool 데이터 형식이 있다고는 생각하지 않습니다. 비트 시프트 연산자를 사용하여 단일 int 배열을 만들고 모든 bool 데이터를 저장할 수 있습니다. – akshay202
@ akshay202 글쎄, 그들은 항상 '살아 있지 않다'(당신은 무엇을 의미 했습니까?). 그것들은 마치 프로그램에 하드 코딩되어 필요할 때만 고려됩니다. 어쨌든 그것은 문제가되지 않습니다. 그러나 당신은 어떤 더 나은 선택권을 보느냐? 그리고 위의 코드는 내가 현재 사용하고있는 것입니다 (예). 하지만 난 간단한 대안이 필요해. – Anubis