2014-01-17 4 views
1

내가 두 배열있어 문자 C의 배열과 비교가

C.

에 문자 배열에 몇 가지 문제가있어 :

char history[10][80]; 
char *args[80]; 

그리고 나 또한 얻었다을 char inputBuffer[80] (이 하나의 문자열을 포함). *args의 값이 history에 있는지 확인하고 싶습니다.

histCount이 0과 10 사이 인 history으로 채 웁니다.

for(j=0; j<MAX_LINE; j++) 
{ 
    history[histCount][j] = inputBuffer[j]; 
} 

은 내가 알아낼 수 없습니다 것은 args[] 일치하는 경우 내가 history을 통해 루프를 볼 수있는 방법입니다.

  1. args[0] == 'romeo'history[3][0] == 'r'가 일치하면.
  2. args[0] == 'selfie'history[7][0] == 's' 인 경우 일치합니다.

내 첫번째 생각은 이런 일을 할 수 있었다, 그러나 어떤 도움을 크게 감상 할 수

for(k=0; k<10; k++) { 
    if(args[1] == history[k]) { 
     printf("FOUND!!\n"); 
    } 
} 

작동하지 않습니다.

+0

샘플 조건 목록이 정확하지 않은 인수에 같은 문자를 찾을 수 있습니다. 'args [0]'은'char *'이고,'history [3] [0]'는'char'입니다. 두 번째 예도 마찬가지입니다. 'args [n]'문자열을'history [m]'문자열과 비교하려고합니다. 원하는 모든 것이 단일 문자 일치라면 args에 또 다른 간접 지정이 필요할 것입니다. – WhozCraig

+0

@WhozCraig 당신 말이 맞습니다. 'arg [1]'은'char *'이고'history [3] [0]'는 char입니다. 서로를 확인하려면 무엇을해야합니까? – Jectson

+1

귀하의 질문에 귀하가 원하는 수표의 종류가 명시되어 있지 않습니다. 다시 말하지만, 각 문자열의 첫 번째 문자 인'(args [n] [0] == history [m] [0])'만 확인하면됩니다. '(strcmp (args [n], history [m]) == 0)'문자열의 완전한 일치를 검사하고 싶다면 두 경우 모두'n'과'm'에 대한 적절한 색인을 사용하여 문제를 다시 해결해. – WhozCraig

답변

1

저는 100 % 확신합니다. args [0]은 문자열로 해석 될 수있는 포인터입니다. 당신이보기에는 당신이 원하는 것이 아닙니다. args [0]이 단일 char이되기를 원합니다.

int main (void) { 
    char history[10][80] 
    char *args[80] 

    int i, j, k; 

    // filling 
    for (i = 0; i < MAX_LINE; ++i) { 
     history[histCount][i] = inputBuffer[i]; // this can be achieved with strcpy(); 
    } 

    for (i = 0; i < 10; ++i) { 
     for (j = 0; j < 80; ++j) { 
      for (k = j; k < 80; ++k) { 
      if (history[i][j] == args[0][k]) { 
       printf ("FOUND!!"); 
       return true; 
      } 
     } 
    } 
} 

2 차원 문자 배열로 기록을 시작하고 문자 배열로 args를 시작합니다. 그런 다음 모든 행에 대해 j의 이력 색인과 args의 k 색인을 비교합니다.

짧은 데모.

 history[0] args 
0,0  a   b 
0,1  a   a 
0,2  a   d 

역사 [0] [0] [1]

+0

고마워, 거의 내가 필요로하는 것.유일한 것은'char * args []'가 코드의 다른 곳에 포인터가되어야한다는 것입니다. 그래서, 다른 문자에 대한 포인터의 첫 번째 문자를 검사 할 수있는 방법이 있습니까? (위에서 설명한대로 for 루프를 사용하여'* args []'만 사용하여) – Jectson

+0

포인터가 필요합니까? 나는 아마도 그걸 도울 수 있습니다. args []를 포인터로 사용할 수 있습니다 (주의! 똑같은 것은 아닙니다). 그러나 비교 행에서 args [0] [k]로 변경할 수 있습니다. – Emz

+0

각 "문자열"의 첫 번째 문자 만 검사합니다. 문제는'args [1]'은'char *'이고'history [n] [m]'은'char'입니다. 예를 들어; ''history [n] [0]은 'h'가 될 수 있습니다. 'args [1]'은'hello '가 될 수 있습니다. – Jectson

2
for(k=0; k<10; k++) 
{ 
    if(strcmp(args[1],history[k]) == 0) 
    { 
     printf("FOUND!!"); 
    } 
}