Vektoren / Strings vergleichen



  • Hallo, habe eine Frage zu folgendem Code:

    char position[] = "Ta1/Sb1/Lc1/Dd1/Ke1/Lf1/Sg1/Th1/Ba2/Bb2/Bc2/Bd2/Be2/Bf2/Bg2/Bh2";
    char colms_descr[] = "a,b,c,d,e,f,g,h";
    char rows_descr[] = "1,2,3,4,5,6,7,8";
    

    Ich möchte jetzt in position[] suchen nach a1, a2, a3 usw.
    dann nach b1, b2, b3 usw.
    Bei jedem Treffer soll mir der Buchstabe, der vor dieser Kombination steht
    zurückgegeben werden.
    Wie gehe ich dabei am besten vor?

    Habe mir gedacht erstmal in zwei for Schleifen jeweils a mit 1,2,3,4 usw.
    zu verknüpfen und dann immer gleich zu vergleichen. Nur wie mach ich das am besten?

    sprintf(temp1,"%c%c",colms_descr[i],rows_descr[j]);
    

    Vielen Dank im Voraus!



  • Sind die Kommata in colms_descr[] bzw. rows_descr[] wirklich notwendig? Das macht die Sache unnötig kompliziert. Und sprintf() ist imho Overkill. Sowas tut's auch:

    temp[0]=colms_descr[i];
    temp[1]=rows_descr[j];
    

    Dann würde ich mit strstr() schauen ob temp in position[] vorkommt, wenn ja, Pointer dekrementieren, zeigt dann auf dein gewünschtes Zeichen.



  • Wie wärs damit:

    #include <string.h>
    
    const char * position = "Ta1/Sb1/Lc1/Dd1/Ke1/Lf1/Sg1/Th1/Ba2/Bb2/Bc2/Bd2/Be2/Bf2/Bg2/Bh2";
    const char * colms_descr = "abcdefgh";
    const char * rows_descr = "12345678"; 
    
    int main() {
          int row, col;
          int num_cols = strlen(colms_descr);
          int num_rows = strlen(rows_descr);
          char * res;
          char sb[3];
          sb[2]=0;
          for( row = 0; row < num_rows; row++) 
             for( col = 0; col < num_cols; col++) {
                sb[0]=colms_descr[col];
                sb[1]=rows_descr[row];
                res = strstr(position, sb);
                if ( 0 != res ) {
                   printf("row = %d, col = %d res = %c\n", row, col, *(res-1));
                }
                else
                   printf("row = %d, col = %d res = not in list\n", row, col);
             }
        return 0;
    }
    

    Kurt


Anmelden zum Antworten