compare char arrays

Discussion in 'C Programming' started by DERosenblum@gmail.com, Oct 3, 2007.

  1. Guest

    Hi, I'm a total newbie at programming. I am looking to compare the an
    element of array2 with the next element of array2, and if equal, put a
    1 in the same spot of array3.

    For example, if array2[2][3] has the same value as array2[3][3], then
    I want the value of array3[2][3] to be 1. My code looks like this,
    thanks!!


    char array2[5][10][20];
    char array3[5][10];

    //arrays are already populated

    for(int a=0; a<5; a++)
    {
    for(i=0; i<10; i++)
    {
    if(array2[a] == array2[a+1]
    {
    array3[a]=1
    }
    }
    }
    , Oct 3, 2007
    #1
    1. Advertising

  2. santosh Guest

    wrote:

    > Hi, I'm a total newbie at programming. I am looking to compare the an
    > element of array2 with the next element of array2, and if equal, put a
    > 1 in the same spot of array3.
    >
    > For example, if array2[2][3] has the same value as array2[3][3],


    array2[N+1][P] is _not_ the next element to array2[N][P].

    > then I want the value of array3[2][3] to be 1. My code looks like this,
    > thanks!!
    >
    >
    > char array2[5][10][20];
    > char array3[5][10];
    >
    > //arrays are already populated
    >
    > for(int a=0; a<5; a++)


    C++ style comments and mixed code and declarations have been standardised
    with the latest C standard, i.e., C99, which is not widely implemented. So
    your code above may not compile under certain configurations.

    > {
    > for(i=0; i<10; i++)


    Also symbolic constants might be better than hardcoded literals. They make
    change easy and centralised.

    > {
    > if(array2[a] == array2[a+1]


    Now here is a problem. When 'a' is four 'a+1' refers outside the bounds of
    array2 and invokes undefined behaviour. To prevent this you need to keep
    track of your loop control variables more closely.

    > {
    > array3[a]=1
    > }
    > }
    > }
    santosh, Oct 4, 2007
    #2
    1. Advertising

  3. Army1987 Guest

    On Wed, 03 Oct 2007 15:45:45 -0700, wrote:

    > Hi, I'm a total newbie at programming. I am looking to compare the an
    > element of array2 with the next element of array2, and if equal, put a
    > 1 in the same spot of array3.
    >
    > For example, if array2[2][3] has the same value as array2[3][3], then
    > I want the value of array3[2][3] to be 1. My code looks like this,
    > thanks!!
    >
    >
    > char array2[5][10][20];
    > char array3[5][10];
    >
    > //arrays are already populated
    >
    > for(int a=0; a<5; a++)
    > {
    > for(i=0; i<10; i++)
    > {
    > if(array2[a] == array2[a+1]

    Arrays evaluate to pointers to their first argument. Since
    &array2[a][0] cannot be &array2[a+1][0] this is always
    false. Try !memcmp(array2[a], array2[a+1], 20).
    > {
    > array3[a]=1
    > }
    > }
    > }


    --
    Army1987 (Replace "NOSPAM" with "email")
    A hamburger is better than nothing.
    Nothing is better than eternal happiness.
    Therefore, a hamburger is better than eternal happiness.
    Army1987, Oct 4, 2007
    #3
  4. On Wed, 03 Oct 2007 15:45:45 -0700, ""
    <> wrote:

    >Hi, I'm a total newbie at programming. I am looking to compare the an
    >element of array2 with the next element of array2, and if equal, put a
    >1 in the same spot of array3.
    >
    >For example, if array2[2][3] has the same value as array2[3][3], then
    >I want the value of array3[2][3] to be 1. My code looks like this,
    >thanks!!
    >
    >
    >char array2[5][10][20];
    >char array3[5][10];
    >
    >//arrays are already populated
    >
    >for(int a=0; a<5; a++)
    >{
    > for(i=0; i<10; i++)
    > {
    > if(array2[a] == array2[a+1]


    array2[a] is itself an array. In this context, the expression
    evaluates to &array[a][0]. Similarly, the next expression
    evaluates to &array2[a+1][0]. It should be obvious that these two
    expressions can never be equal. If you are trying to determine if all
    20 elements of array[a] are equal to the corresponding 20 elements
    of array2[a+1], look into using memcmp.

    Also note that when a is 4, you invoke undefined behavior since
    array2[5] does not exist.

    > {
    > array3[a]=1
    > }
    > }
    >}



    Remove del for email
    Barry Schwarz, Oct 10, 2007
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Bill Reyn
    Replies:
    3
    Views:
    2,225
    Bob Hairgrove
    Jun 22, 2004
  2. jamx
    Replies:
    11
    Views:
    819
    Barry Schwarz
    Mar 12, 2006
  3. lovecreatesbeauty
    Replies:
    1
    Views:
    1,007
    Ian Collins
    May 9, 2006
  4. arnuld
    Replies:
    19
    Views:
    670
    Jacek Dziedzic
    Mar 30, 2007
  5. Philipp
    Replies:
    21
    Views:
    1,102
    Philipp
    Jan 20, 2009
Loading...

Share This Page