Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Αλάζοντας γράμματα σε κείμενο

Îåêßíçóå áðü ôï ìÝëïò AlKiS. Τελευταία δημοσίευση από το μέλος M1ke στις 19-10-2008, 12:19. Υπάρχουν 11 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  05-08-2008, 10:48 43931

    Αλάζοντας γράμματα σε κείμενο

    Έχω δοκιμάσει πολλούς διαφορετικούς τρόπους αλλά κανένας δεν δούλεψε…
    Θέλω το πρόγραμμα να αλλάζει το κάθε γράμμα του κειμένου με συγκριμένα. Σε όλες μου τις προσπάθειες καταφέρνω να αλλάζει την πρώτη σειρά του τεχτ αλλά τις υπόλοιπες δεν τις βλέπει καν. Κατεβάστε τον κωδικό και βοηθήστε με σας παρακαλώ

    http://alkis.fileave.com/Cypher.zip
    Δημοσίευση στην κατηγορία: ,
  •  05-08-2008, 11:28 43936 σε απάντηση της 43931

    Απ: Αλάζοντας γράμματα σε κείμενο

    Τί προσπαθείς να κάνεις? Να αλλάξεις το κείμενο? Να αλλάξεις το font? Ακόμα και να κατεβάσουμε τον κώδικα, αν δεν ξέρουμε τί προσπαθείς να κάνεις δεν πρόκειται να βγάλουμε άκρη

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  05-08-2008, 14:22 43942 σε απάντηση της 43936

    Απ: Αλάζοντας γράμματα σε κείμενο

    Το "α" να γινεται "z" το "b" να γινεται "y" και τα λοιπα
  •  05-08-2008, 16:11 43944 σε απάντηση της 43942

    Απ: Αλάζοντας γράμματα σε κείμενο

    H String.Replace αρκεί για να το κάνει αυτόμ φτάνει να της δώσεις όλο το string και όχι μόνο μία γραμμή τη φορά.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  05-08-2008, 18:21 43946 σε απάντηση της 43944

    Απ: Αλάζοντας γράμματα σε κείμενο

    δεν το κάνει....!! το προτο που προσπάθεισα ηταν αυτο. δεν αλλάζει όσο κιαν προσπαθώ

    αν νομιζεις οτι μπορείς να το κάνει, πλζ κάνε ενα πρόγραμμα και κώστο μου, και ας αλλάζει μόνο το γράμμα "α" με το γράμα "ζ"
    τιποτα άλλο, ασ κάνει αυτό και τα υπόλυπα τα γράφω εγώ.

    ευχαριστώ
  •  05-08-2008, 18:34 43947 σε απάντηση της 43946

    Απ: Αλάζοντας γράμματα σε κείμενο

    Εάν προσπαθείς να κάνεις κάτι σαν:

    string myString = "ABC";

    myString.Replace("A","K");

    τότε, ναι δεν θα δουλέψει γιατί η string class όπως και η datetime και μερικές εκατοντάδες ακόμα είναι Immutable, με απλά λόγια επιστρέφουν ένα "νεο" αντικείμενο σαν αποτέλεσμα.

    string myString = "ABC", newString = "";

    newString = myString.Replace("A","K");

    Έτσι θα δουλέψει!


    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  05-08-2008, 18:39 43948 σε απάντηση της 43946

    Απ: Αλάζοντας γράμματα σε κείμενο

    Μπορείς να θεωρήσεις δεδομένο ότι το κάνει. Αν δεν το πιστεύεις, απλά φτιάξε ένα string που περιέχει vbCrLf και κάνε το replace. Αν κάτι δεν σου δουλεύει είναι επίσης δεδομένο ότι έχεις κάνει κάτι περίεργο.

    Ο κώδικας σου είναι αρκετά ανακατεμένος και δεν μπορώ να πω ότι καταλαβαίνω τί κάνει κοιτάζοντας τον. Πού νομίζεις ότι είναι το λάθος? Τί κάνει ο κώδικας? Τϊ περιμένεις να κάνει? Τί είναι το sequence και το sum? Επειδή βλέπω πολλά ToLower αναρωτιέμαι μήπως θέλεις να κάνεις case insensitive replace? Η Replace είναι case sensitive.

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  05-08-2008, 19:04 43949 σε απάντηση της 43948

    Απ: Αλάζοντας γράμματα σε κείμενο

    Αυτο που θέλω να κάνει είναι το εξής:

    Βαζεις ενα κείμενο στο πάνω κουτάκι. πατάς το κουμπί "cypher" και στο κάτου κουτάκι εμφανίζεται το κείμενο που έχεις στο πάνω απλός το κάθε γράμμα (α,β,γ,δ...) πάει αντίστροφο. (δλδ: αν έβαλες "α" θα σου βγεί "ω", βέβαια εγώ το κάνω με την αγλική αλφάβητα αλλά για να πάρετε το νόημα σασ το λέω)

    κατάφερα να κάνει αυτο που θέλω, όμως το κάνει μόνο στην πρώτη σειρά!! "μεταφράζει" μόνο την πρώτη σειρά. θέλω να τα μεταφράζει ΟΛΑ

    (P.S: είτε κεφαλαία είτε μικρά κατα τη "μετάφραση" τα κάνει κεφαλέα. το ToLower το έβαλα ετσι ώστε εάν κάποιος βάλει κεφαλαίο γράμμα το πρόγραμμα να μην μπερδεφτει και να κάνει τη δουλιά του. τώρα αν το κάνετε και case sensitive εμένα θα μου άρεσε. αλλά αρχικα θέλω απλος να δουλέψει)

    ευχαριστώ και πάλι!
  •  05-08-2008, 19:48 43951 σε απάντηση της 43949

    Απ: Αλάζοντας γράμματα σε κείμενο

    textBox1.Text=textBox1.Text.Replace("a","z") . Το πρόβλημα σου είναι ότι προσπαθείς να το κάνεις γραμμή-γραμμή χωρίς λόγο. Κάπου εκεί θα χάνεις κάποιο assignment και γίνεται το μπέρδεμα.

    Ο τρόπος αυτός πάντως τρώει πολύ μνήμη. Όπως είπε και ο Παναγιώτης (Κεφαλίδης) κάθε κλήση της Replace επιστρέφει ένα νέο string. Αντί γι αυτό καλύτερα να χρησιμοποιήσεις ένα StringBuilder, να διαβάσεις ένα-ένα τους χαρακτήρες του string στο textbox, να κάνεις την αντιστροφή και να προσθέσεις τον αντεστραμμένο χαρακτήρα στον StringBuilder. Κάτι σαν

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       Dim input As String = TextBox1.Text
       Dim sb As New StringBuilder(input.Length)
       For Each c As Char In input
          sb.Append(Invert(c))
       Next
       TextBox1.Text = sb.ToString()
    End Sub

    όπου Invert ένα ξεχωριστό function που έφτιαξα για να μην μπλεχτεί ο κώδικας του Button1_Click με αυτό του Invert και δεν βγαίνει άκρη. Επειδή μάλιστα είμαι τεμπέλης και δεν θέλω να γράφω switch για 25 χαρακτήρες φτιάχνω ένα πίνακα με τις τιμές που θέλω να επιστρέψω, αντεστραμένες:

    Imports System.Text

    Public Class Form1

       Dim lookup As New List(Of Char)
       Dim base As Int16 = AscW("A")

       Public Sub New()
          MyBase.New()
          InitializeComponent()
          For charIdx = AscW("A") To AscW("z")
             lookup.Add(ChrW(charIdx))
          Next
          lookup.Reverse()
       End Sub

       Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
          Dim input As String = TextBox1.Text
          Dim sb As New StringBuilder(input.Length)
          For Each c As Char In input
             sb.Append(Invert(c))
          Next
          TextBox1.Text = sb.ToString()
       End Sub

       Private Function Invert(ByVal c As Char) As Char
          Dim charIdx As Int16 = AscW(c)
          If (charIdx < base Or charIdx - base > lookup.Count - 1) Then
             Return c
          End If
          Return lookup(charIdx - base)
       End Function
    End Class

    Το μόνο "περίεργο" είναι ότι η αντιστροφή περιλαμβάνει κεφαλαία και μικρά. Έτσι το αντίστροφο του "a" είναι το "Z". Ακόμα καλύτερα, μπορώ να εκμεταλλευτώ το γεγονός ότι οι χαρακτήρες έρχονται ο ένας μετά τον άλλο και να κάνω την Invert:

    Dim start As Int16 = AscW("A")
    Dim finish As Int16 = AscW("z")

    Private Function Invert(ByVal c As Char) As Char
       Dim charIdx As Int16 = AscW(c)
       If (charIdx < start Or charIdx > finish) Then
          Return c
       End If
       Return ChrW(finish - (charIdx - start))
    End Function

    Έτσι γλυτώνω και τον πίνακα.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  05-08-2008, 20:25 43954 σε απάντηση της 43951

    Απ: Αλάζοντας γράμματα σε κείμενο

    WOW

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

    ή το κάνει ήδη;;

    θα καθίσω να το μελετήσω. ευχαριστώ!!
  •  05-08-2008, 20:52 43955 σε απάντηση της 43954

    Απ: Αλάζοντας γράμματα σε κείμενο

    Τα γράμματα στο ASCII (και το Unicode) είναι ταξινομημένα με τη σειρά A-Z ακολουθούμενα από μερικά σύμβολα και μετά τα μικρά a-z. Έτσι είναι δυνατή η αντιστροφή των χαρακτήρων με μία απλή αφαίρεση. Τη σειρά των χαρακτήρων μπορείς να τη δεις και ανοίγοντας το Character Map από τα System Tools των Windows.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  19-10-2008, 12:19 45578 σε απάντηση της 43954

    Απ: Αλάζοντας γράμματα σε κείμενο

    (Λίγο άσχετο με την ερώτησή σου)Smile

    Εφόσον θέλεις να κάνεις ciphering πρόγραμμα κοίτα λίγο το κρυπτόγραμμα του Vigenere.

    Είναι συμμετρικός αλγόριθμος με κλειδί, όπου η αντιστοίχηση γίνεται βάσει ενός πίνακα μετάθεσης. Οπότε και το conversion μπορεί να γίνει "χτυπώντας" ένα char ή string array.. Wink

    I think there's to much blood in my caffeine system..
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems