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