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

c - απλή βελτιστοποίηση λύσης εύρεσης αλφαριθμητικού με ορίσματα στην main


kitkatO
Μετάβαση στην απάντηση Απαντήθηκε από cvb~,

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

Δημοσ. (επεξεργασμένο)
Έχω φτιάξει το εξής πρόγραμμα στην 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
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

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