kitkatO Δημοσ. 5 Δεκεμβρίου 2022 Share Δημοσ. 5 Δεκεμβρίου 2022 (επεξεργασμένο) Έχω φτιάξει το εξής πρόγραμμα στην 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]); } } } } } } } } } } Επεξ/σία 5 Δεκεμβρίου 2022 από kitkatO λαθος τίτλος Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
cvb~ Δημοσ. 5 Δεκεμβρίου 2022 Share Δημοσ. 5 Δεκεμβρίου 2022 Καλησπέρα! Μήπως θα σε βόλευε να χρησιμοποιούσες την strstr() για να αναζητήσεις το αλφαριθμητικό “PRS120” αντί να ψάχνεις έναν έναν τους χαρακτήρες του; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Λύση cvb~ Δημοσ. 5 Δεκεμβρίου 2022 Λύση Share Δημοσ. 5 Δεκεμβρίου 2022 (επεξεργασμένο) Κάτι σαν και αυτό ίσως σου κάνει: #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; } Επεξ/σία 5 Δεκεμβρίου 2022 από cvb~ 1 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
kitkatO Δημοσ. 5 Δεκεμβρίου 2022 Μέλος Share Δημοσ. 5 Δεκεμβρίου 2022 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; } ναι, είναι αυτό ακριβώς που έψαχνα σε ευχαριστώ Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
imitheos Δημοσ. 10 Δεκεμβρίου 2022 Share Δημοσ. 10 Δεκεμβρίου 2022 (επεξεργασμένο) Στις 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]); } Επεξ/σία 10 Δεκεμβρίου 2022 από imitheos Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
cvb~ Δημοσ. 10 Δεκεμβρίου 2022 Share Δημοσ. 10 Δεκεμβρίου 2022 Ναι, νομίζω πως έχεις δίκιο, είναι πιο σωστό όπως το λες! Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα