我应该如何搜索2D char数组中的字符?

时间:2014-05-19 16:51:37

标签: c arrays pointers

我有两个char数组:(用于清晰的魔术数字)

char Intermediary[121];
char RI[20][7];

我使用以下代码将Intermediary的内容复制到RI :(请记住,每行需要一个空分隔符(20 *(7 - 1))= 121 - 1)

int a = 0;
int b = 0;
int c = 0;

for( a=0; a<20; a++ )
{
    for( b=0; b<6; b++ )
    {
        RI[a][b] = Intermediary[c++];
    }

    RI[a][6] = '\0';

 }   

我打算使用strchr,检查是否例如RI [0] [0]到RI [0] [7]包含y。如果事实证明在该范围内找不到y,程序应该迭代到RI [1] [0]和RI [1] [7]之间的字符。

但是,strchr将指针作为参数,而不是char数组。

如何制作指针,我可以在其中遍历每一行?

另一方面,如果有人想要额外的布朗尼点,我的代码是否可以将1D数组转换为2D数组?

3 个答案:

答案 0 :(得分:2)

要在给定行chr上找到字符a,您可以使用

char *pch;

pch = strchr( RI[a], chr );
if(pch)
{
    // character found; pch is a pointer to it.
}
else
{
    // character not found
}

RI[a]是指向行的第一个元素的指针,也可以表示为&(RI[a][0])

但首先你必须修复你的while循环,因为你没有按照你在问题中所说的做法(为每一行创建一个以NULL结尾的字符串)。

我建议这个修复版本,使用两个for循环重写:

for( a=0; a<20; a++ )
{
    for( b=0; b<6; b++ )
    {
        RI[a][b] = Intermediary[c++];
    }
    RI[a][6] = '\0';
 }               

答案 1 :(得分:0)

需要修复将字符从Intermediary复制到RI的代码,以确保RI包含空终止字符串。

while (c != 121)
{
    if (b == 6) /* Go to the next column, the first element */
    {
        RI[a][b] = '\0'; // Make sure that R[a] is null terminated.
        ++a;
        b = 0;
    }                   

    RI[a][b] = Intermediary[c];

    ++b;        /* Iterate to next letter of RebuiltIntermediary */
    ++c;        /* Iterate to next letter of Intermediary */
}

现在,您可以使用RI来搜索y

for ( int i = 0; i < 21; ++i )
{
    if ( strchr(RI[i], 'y') != NULL )
    {
       // 'y' found. Do what you need to do.
    }
}

答案 2 :(得分:-1)

这里可以找到一个很好的例子。

http://www.cplusplus.com/reference/cstring/strchr/

为了搜索每一行,你可以使用for循环迭代每一行,并使用上面的例子,将每一行(作为一个字符串)独立输入到strchr函数。以上示例的修改版本,使用较小的矩阵执行此操作:

#include <stdio.h>
#include <string.h>
#include <iostream>

using namespace std;

int main ()
{
    char str2[3][3] = {{'a','b','c'},{'d','a','f'},{'g','a','i'}};

    for (int i=0;i<3;i++)
    {
        char * pch;

        char str[3]={};

        for (int j=0;j<3;j++) str[j] = str2[i][j];

        char qw = 'a';

        printf ("Looking for the %c character in line %d...\n",qw,i);

        pch=strchr(str,qw);

        while (pch!=NULL)
        {
            printf ("found at %d\n",pch-str+1);
            pch=strchr(pch+1,'s');
        }
    }

  return 0;
}

希望这会有所帮助。最好的问候。