2014-01-17 97 views
1

我有一些問題字符數組中C.字符數組,並比較

我有兩個數組:

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

而且我也得到了char inputBuffer[80](這包含一個字符串)。 我想要做的是找出*args中的值是否存在於history

我這樣填滿historyhistCount介於0和10之間)。

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

我想不通的是如何,我可以遍歷history,看它是否符合args[]

  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 *','歷史[3] [0]'是'char'。對於第二個例子同樣如此。看起來你試圖將'args [n]'處的字符串與'history [m]'處的字符串相匹配。如果所有你想要的是一個單一字符匹配,你將需要'args'上的另一個間接尋址。 – WhozCraig

+0

@WhozCraig你是對的。 'args [1]'是'char *',而'history [3] [0]'是一個字符。我需要做什麼才能檢查這些對方? – Jectson

+1

你的問題沒有顯示你想要的那種支票的意圖。同樣,如果你只想檢查每個字符串的第一個字符,'(args [n] [0] == history [m] [0])''。如果你想檢查字符串的完全匹配,'(strcmp(args [n],history [m])== 0)',在這兩種情況下適當的索引'n'和'm'來匹配你的問題'正在解決。 – WhozCraig

回答

1

我不是100%確定我明白。 args [0]是一個指針,可以解釋爲一個字符串。在你的例子中,這不是你想要的。你想參數[0]是一個單一的字符。

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; 
      } 
     } 
    } 
} 

它所做的是將歷史作爲2D字符數組初始化,並將args作爲char數組引用。然後,對於每一行,它都將歷史的j索引與args的k索引進行比較。

爲了它。一個簡短的演示。

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

歷史[0] [0]會發現在ARGS相同的字符[1]

+0

謝謝,這就是我所需要的。唯一的事情是我需要'char * args []'作爲代碼中其他地方的指針。那麼,我有沒有辦法檢查指針對第一個字符的第一個字符? (通過像上面描述的那樣執行for循環,僅使用'* args []') – Jectson

+0

你需要它作爲指針嗎?我可以幫忙。你可以使用args []作爲指針(注意!它不完全一樣)。但是您可以在比較行中更改爲args [0] [k]。 – Emz

+0

我只檢查每個「字符串」的第一個字符。問題是'args [1]'是'char *',而'history [n] [m]'是'char'。例如; 'args [1]'可能是'hello',而'history [n] [0]可能是'h' - 然後我希望它是匹配的。 – Jectson

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