2014-01-17 94 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!!"); 
    } 
}