Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)
Έχω φτιάξει το εξής πρόγραμμα στην C στο οποίο παίρνω όρισμα από την main τυχαία αλφαριθμητικά και εφόσον υπάρχει το PRS120 μέσα σε οποιοδήποτε από αυτά το εκτυπώνει - επίσης εκτυπώνει το τελευταίο χαρακτήρα του αλφαριθμητικού.
πχ EWJFWPRS120 FEWPRS130 PRS120 PRS1209
print: EWJFWPRS120 PRS120 PRS1209 και τον τελευταίο το 9 
επειδή θεωρώ τον τρόπο μου με τόσα if χάλια θα ήθελα να δω μια διαφορετική πιο σύντομη και αποτελεσματική προσέγγιση με κάποιο strcmp ή κατι παρόμοιο την οποία δεν έχω καταφέρει να βρω


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


//psaxnw to PRS120


int main(int args, char *argv[]){
    int i = 1;
    int j = 0;
    for(int i = 1; i<args ; i++){
        int sum = 0;
        for (int j = 0; j < strlen(argv[i]); j++)
        {
            if((i==(args-1) )&& (j == strlen(argv[i])-1)){
                printf("\n EDW edw to last %c", argv[i][j]);
            }

            int sum = 0;

            if(strlen(argv[i])>= 6){
                if((argv[i][j])=='P'){
                    sum= sum + 1;

                    if((argv[i][j+1])=='R'){
                        sum = sum +1;

                        if((argv[i][j+2])=='S'){
                            sum = sum +1;

                            if((argv[i][j+3])=='1'){
                                sum = sum +1;

                                    if((argv[i][j+4])=='2'){
                                        sum = sum +1;

                                        if((argv[i][j+5])=='0' && sum == 5){
                                            printf("%s \n", argv[i]);
                                        }
                                    }

                            }
                        }
                    }        
                }
            }
        }
    }
}
Επεξ/σία από kitkatO
λαθος τίτλος
Δημοσ.

Καλησπέρα! Μήπως θα σε βόλευε να χρησιμοποιούσες την strstr() για να αναζητήσεις το αλφαριθμητικό “PRS120” αντί να ψάχνεις έναν έναν τους χαρακτήρες του;

  • Λύση
Δημοσ. (επεξεργασμένο)

Κάτι σαν και αυτό ίσως σου κάνει:

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

int main(int argc, char *argv[])
{
    char *str;
    const char *SEARCH_TERM = "PRS120";

    for(int i = 1; i < argc ; i++) {
        if((str = strstr(argv[i], SEARCH_TERM)) != NULL)
            printf("%s\n", argv[i]);
        if(i == (argc - 1))
            for(int j = 0; j < strlen(argv[i]); j++)
                if(j == (strlen(argv[i]) - 1))
                    printf("Last character: %c\n", argv[i][j]);
    }
    return 0;
}

spacer.png

Επεξ/σία από cvb~
  • Like 1
Δημοσ.
4 ώρες πριν, cvb~ είπε

Κάτι σαν και αυτό ίσως σου κάνει:

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

int main(int argc, char *argv[])
{
    char *str;
    const char *SEARCH_TERM = "PRS120";

    for(int i = 1; i < argc ; i++) {
        if((str = strstr(argv[i], SEARCH_TERM)) != NULL)
            printf("%s\n", argv[i]);
        if(i == (argc - 1))
            for(int j = 0; j < strlen(argv[i]); j++)
                if(j == (strlen(argv[i]) - 1))
                    printf("Last character: %c\n", argv[i][j]);
    }
    return 0;
}

spacer.png

ναι, είναι αυτό ακριβώς που έψαχνα σε ευχαριστώ 

Δημοσ. (επεξεργασμένο)
Στις 5/12/2022 στις 4:37 ΜΜ, cvb~ είπε

Κάτι σαν και αυτό ίσως σου κάνει:

    for(int i = 1; i < argc ; i++) {
        if((str = strstr(argv[i], SEARCH_TERM)) != NULL)
            printf("%s\n", argv[i]);
        if(i == (argc - 1))
            for(int j = 0; j < strlen(argv[i]); j++)
                if(j == (strlen(argv[i]) - 1))
                    printf("Last character: %c\n", argv[i][j]);
    }

 

 Γιατί έβαλες α) τον έλεγχο i == argc - 1 μέσα στο for αντί να τρέχει μετά και β) ένα for που να ανατρέχει τους χαρακτήρες έναν - έναν ελέγχοντας αν είναι ο τελευταίος αντί να τυπώνει απλά τον τελευταίο; Βλέπω και το αρχικό πρόγραμμα κάτι τέτοιο κάνει οπότε κάτι θα μου διαφεύγει στο τι θέλουμε να κάνει το προγραμμα.

Κάτι σαν αυτό δεν είναι το ίδιο; Το τελευταίο όρισμα είναι το argc - 1 και ο τελευταίος χαρακτήρας του είναι ο strlen  - 1.

for(int i = 1; i < argc ; i++) {
        if((str = strstr(argv[i], SEARCH_TERM)) != NULL)
            printf("%s\n", argv[i]);
}
/* oste na mhn trexei an den dosoyme orismata */
if (argc > 1) {
        printf("Last character: %c\n", argv[argc - 1][strlen(argv[argc - 1]) - 1]);
}

 

Επεξ/σία από imitheos

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...