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

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

Δημοσ.

 

Και πάλι ξέχασες να θέσεις το τελευταίο χαρακτήρα ως '\0'. Πήρα τον κώδικα σου, έκανα κάποιες μικροσκοπικές αλλαγές και τώρα δουλεύει. Αν έχεις κάποια απορία, ρώτα. Προσπάθησα να μην τον αλλάξω πολύ, απλά δε χρειάζεσαι όλες αυτές τις παραπανίσιες μεταβλητές.

#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
int main(int argc, char* argv[])
{
    FILE *filep0, *filep1;
    char str0[200], str1[200];
    char out0[200], out1[200];
    int i, j, k;
    int index, len;
    char temp;
 
    filep0 = fopen(argv[1], "r");
    filep1 = fopen(argv[2], "r");
 
    while (1) {
        if ((fgets(str0,200, filep0) == NULL)||(fgets(str1,200, filep1) == NULL)) {
            break;
        }
 
        /* Ignore newline characters */
        str0[strlen(str0) - 1] = '\0';
        str1[strlen(str1) - 1] = '\0';
 
        puts(str0);
        puts(str1);
 
        len= strlen(str0);
        for(j=1; j<len; j++) {
            for(k=0; k<len-j; k++) {
                if((int)str0[k]>=(int)str0[k+1]) {
                    temp=str0[k];
                    str0[k]=str0[k+1];
                    str0[k+1]=temp;
                }
            }
        }
        index = 0;
        for(i=0; str1[i] != '\0'; i++) {
            if(str0[i] != ' ') {
                out0[index] = toupper(str0[i]);
                index++;
            }
        }
        out0[index] = '\0';
 
        puts(out0);
 
 
        len=strlen(str1);
        for(j=1; j<len; j++) {
            for(k=0; k<len-j; k++) {
                if((int)str1[k]>=(int)str1[k+1]) {
                    temp=str1[k];
                    str1[k]=str1[k+1];
                    str1[k+1]=temp;
                }
            }
        }
        index=0;
        for(i=0; str1[i] != '\0'; i++) {
            if(str1[i] != ' ') {
                out1[index] = toupper(str1[i]);
                index++;
            }
        }
        out1[index] = '\0';
 
        puts(out1);
    }
 
    fclose(filep0);
    fclose(filep1);
 
    return 0;
}

Σε ευχαριστω πολυ αλλα αν δεις κια παλι δεν εχει σωστη εξοδο.

post-302620-0-30290500-1512509124_thumb.png

Δημοσ.

[email protected], μου ξέφυγε κάτι τόσο σημαντικό αλλά για κάποιο λόγο έδειχνε να δουλεύει... Άλλαξε τη γραμμή #40, θέλει str0 και όχι str1.

 

UPDATE : Με καποιες προσθηκες για τις εμφανισεις εχω αυτο το οποιο δουλευει για τις 4/5 περιπτωσεις εισοδων.

 

 while (1) {
        if ((fgets(str0,512, filep0) == NULL)||(fgets(str1,512, filep1) == NULL)) {
            break;
        }
 
        /* Ignore newline characters */
        str0[strlen(str0) - 1] = '\0';
        str1[strlen(str1) - 1] = '\0';
        puts(str0);
        puts(str1);
        len= strlen(str0);
        for(j=1; j<len; j++) {
            for(k=0; k<len-j; k++) {
                if((int)str0[k]>=(int)str0[k+1]) {
                    temp=str0[k];
                    str0[k]=str0[k+1];
                    str0[k+1]=temp;
                }
            }
        }
        index = 0;
        for(i=0; str0[i] != '\0'; i++) {
            if(str0[i] != ' ') {
                out0[index] = toupper(str0[i]);
                index++;
            }
        }
        out0[index] = '\0';
 
       
        len=strlen(str1);
        for(j=1; j<len; j++) {
            for(k=0; k<len-j; k++) {
                if((int)str1[k]>=(int)str1[k+1]) {
                    temp=str1[k];
                    str1[k]=str1[k+1];
                    str1[k+1]=temp;
                }
            }
        }
        index=0;
        for(i=0; str1[i] != '\0'; i++) {
            if(str1[i] != ' ') {
                out1[index] = toupper(str1[i]);
                index++;
            }
        }
        out1[index] = '\0';
        puts(out0);
        puts(out1);}

Για τη τελευταια με εισδους:

Kavvadias was born in Nikolsk-Ussuriysky (now Ussuriysk in the Primorsky Krai region of Russia). He believed that this had established a permanent connection between him and the Far East as he wrote in one of his short stories titled "Li".

His parents were Greek, originating from the island of Cefalonia and as a young child he had the opportunity to travel extensively.

His family returned to their island of origin for a few years before finally moving to Pireus, Athens' port, in 1921.He wrote his first poems while in grammar school.

teberaththesm..idkl" itetar fti s se arnsks ir i eebwl eeUelshs o anhaseta ahvsw s  bf(uF  ayanlo ai usio-idundytiworio oksrh  rer krdog eniide rs ti ieepiicKyLvn"e oshRKtneisshataniio wn oNaa EnotdH  csisn ohtysr emern)htb   svkm atoPUsnn

hitkrarspen relgh ottivyof oenaetuni ola de i c so eraa ogivhelrnd nue. isy da  hltpetrcfxgiepgmt  ,an hteso iiao dhenyantflnsarw e

 wv9 ii  Hauhns mroeagfhgmimri n hoyrial lbtnr lsH ders.ulr,noneewstraiie frw s,f1sea roi'a liettyh  a s emono f tg itec itd oro1fensfnerpoo2 rrf AmPtphi leysoioei .

Γιατι εχω αυτη τη "μπερδεμενη" εξοδο κια μου βαζει τα 3 γραμματα μπροστα ενω θα επρεπε να ειναι με ταυπογραμμισμενα το καθενα?BTW οι εισοδοι και οι 3 ειναι αναγραμματισμοι,δηλαδη θα επρεπε να εχω

TRUE

TRUE

TRUE

post-302620-0-76705800-1512535081_thumb.png

Ευχαριστω!

Δημοσ.

Ουπς, σόρρυ, σε ξέχασα... Νομίζω ότι έχει πρόβλημα η ταξινόμηση που κάνεις, αλλά δε μπορώ να το βρω. Αν θες να το λύσεις εύκολα, απλά χρησιμοποίησε την qsort. Κάπως έτσι:

#include <stdlib.h>
 
.......
 
int cmpfunc(const void* a, const void* 
{
    return *(char*)a - *(char*)b;
}
 
......
 
qsort(str0, strlen(str0), 1, cmpfunc);
qsort(str1, strlen(str1), 1, cmpfunc);
  • Like 1
Δημοσ.

 

Ουπς, σόρρυ, σε ξέχασα... Νομίζω ότι έχει πρόβλημα η ταξινόμηση που κάνεις, αλλά δε μπορώ να το βρω. Αν θες να το λύσεις εύκολα, απλά χρησιμοποίησε την qsort. Κάπως έτσι:

#include <stdlib.h>
 
.......
 
int cmpfunc(const void* a, const void* 
{
    return *(char*)a - *(char*)b;
}
 
......
 
qsort(str0, strlen(str0), 1, cmpfunc);
qsort(str1, strlen(str1), 1, cmpfunc);

Τιποτα,ακριβως το ιδιο προβλημα με το απο πανω ποστ.

Δημοσ.

Τιποτα,ακριβως το ιδιο προβλημα με το απο πανω ποστ.

Απλα δες το τελευταιο σκρινσοτ που εχω βαλει.Ειναι ακριβως η ιδια εξοδος.

 

Το φτιαξα παντως βαζοντας μια συνθηκη αν δεν ειναι ταξινομημενα τα στρινγκ να ξαναταξινομουντε δευτερη φορα.Σ ευχαριστω παντως για την βοηθεια και την διαθεση σου !

Αν ξερει καποιος να μου εξηγησει γιατι συμβαινει αυτο (δεν ταξινομηθηκαν με την πρωτη προσπαθεια) θα το εκτιμουσα πολυ.

Δημοσ.

Αν τα γράμματα περιορίζονται σε A..Z a..z τότε γίνεται εύκολα και γρήγορα να βρεθούν οι αναγραμματισμοί. Λογικά τα διαστήματα δεν πρέπει να μετράνε (δεν είναι γράμμα το διάστημα, αλλά είναι θέση χαρακτήρα). Οφείλει αυτός που φτιάχνει την άσκηση να το σκεφτεί λίγο παραπάνω!

Ο αλγόριθμος είναι απλός και ας υποθέσουμε ότι δουλεύουμε στο ASCII, με χαρακτήρες από 0 έως 255. Έχουμε λοιπόν δυο πίνακες με 256 στοιχεία, και κάθε γράμμα γίνεται δείκτης στον αντίστοιχο πίνακα, ενημερώνεται κατά ένα και τέλος γίνεται έλεγχος των δυο πινάκων, για διαφορές. Με την πρώτη διαφορά ακυρώνεται  η υπόθεση ότι οι δυο γραμμές έχουν αναγραμματισμό! (οι πίνακες περιορίζονται αν έχουμε μόνο γράμματα A..Z και a..z).

Με απλά λόγια, καθάρισμα δυο πινάκων για σύγκριση,διάβασμα γραμμών, στήσιμο πινάκων βάσει γραμμάτων, έλεγχος και καθάρισμα ταυτόχρονα για το επόμενο διάβασμα γραμμών, τερματισμός ή συνέχιση, μέχρι να τερματίσουν οι γραμμές ή να βρεθεί μη αναγραμματισμός.

Δεν χρειάζεται ταξινόμηση! Για 200 χαρακτήρες Χ 2 γραμμές εισόδου, θα γίνουν 200 αθροίσεις+200 αθροίσεις,  μετά 200 το πολύ συγκρίσεις, Δεν υπάρχει καμία μετακίνηση δεδομένου, εκτός από αυτά που συγκρίνονται, και την χρήση του δεδομένου (χαρακτήρα) ως δείκτη στο πίνακα.

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

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

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

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

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

Σύνδεση

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

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