2016-12-22 6 views
-6

Ich habe tatsächlich versucht, eine StringToASCII-Funktion in C# von Grund auf neu zu machen.StringToASCII von Grund auf fehlgeschlagen

ich den Eingang von _myString und das ist der Code:

public void convertToASCII() { 
    //A-Z --> 65-90 
    //a-z --> 97-122 
    //0-9 --> 48-57 
    //Space --> 32 

    int[] returnString = new int[_myString.Length]; 
    int iTableau = 0; 
    char iAZ = 'A'; 
    char iaz = 'a'; 
    char i09 = '0'; 
    char iSpace = ' '; 

    for(int i = 0; i < _myString.Length; i++) 
    { 
     if(_myString[i] >= 65 && _myString[i] <= 90 || _myString[i] >= 97 && _myString[i] <= 122 || _myString[i] >= 48 && _myString[i] <= 57 || _myString[i] == 32) 
     { 
      while(iAZ < 90 || iaz < 122 || iaz < 122 || i09 < 57 || _myString[i] == 32) 
      { 
       if(_myString[i] == iAZ && iAZ >= 'A' && iAZ <= 'Z') 
       { 
        returnString[iTableau] = iAZ; 
        iTableau++; 
        iAZ--; 
       } 
       else 
       { 
        iAZ++; 
       } 
       if(_myString[i] == iaz && iaz >= 'a' && iaz <= 'z') 
       { 
        returnString[iTableau] = iaz; 
        iTableau++; 
        iaz--; 
       } 
       else 
       { 
        iaz++; 
       } 
       if(_myString[i] == i09 && i09 >= '0' && i09 <= '9') 
       { 
        returnString[iTableau] = i09; 
        iTableau++; 
        i09--; 
       } 
       else 
       { 
        i09++; 
       } 
       if(_myString[i] == iSpace) 
       { 
        returnString[iTableau] = iSpace; 
        iTableau++; 
       } 
      } 
     } 
    } 

    _myString = ""; 

    for (int i = 0; i < returnString.Length; i++) 
    { 
     _myString += returnString[i]; 
    } 
} 

Ich habe auch versucht, diese Art von Funktion, die es funktioniert, aber ich möchte machen, die nur Zeichen von AZ und AZ überprüft und 0-9 und Platz.

Das gleiche wie die erste Funktion, nehme ich die Eingabe von einer globalen String-Variablen namens "_myString".

public void convertToASCII() 
{ 
    string asciiChar; 
    string returnString = ""; 

    foreach (char c in _myString) 
    { 
     asciiChar= ((int)(c)).ToString(); 
     returnString += " " + asciiChar; 
    } 
    _myString = returnString; 
} 
+2

Gibt es irgendwo eine Frage? – Abion47

+0

Was meinst du mit "nur prüfen"? Was machst du mit Charakteren, die außerhalb dieser Bereiche liegen? Einfach weglassen? Verwenden Sie ein Ersatzzeichen? Was ist los mit 'Encoding.ASCII'? – itsme86

+0

@ itsme86 zuerst vielen Dank für Ihre schnelle Antwort, ich möchte nur überprüfen, ob _myString [i] auf diesen Bereich ist, dann lege ich sie in ein Array, das ich bis dahin wieder zusammenfügen. –

Antwort

0

Dies ist eigentlich relativ einfach:

public string StringToLettersOrNumbersOrSpace(string input) 
{ 
    var sb = new StringBuilder(); 

    for (int i = 0; i < input.Length; i++) 
    { 
     if (Char.IsLetterOrDigit(input[i]) || input[i] == ' ') 
     { 
      sb.Append(input[i]); 
     } 
    } 

    return sb.ToString(); 
} 

Zuerst werden Sie StringBuilder statt kontinuierlich Anhängen an eine String-Variable verwendet werden soll. Zeichenketten in C# sind unveränderlich, was bedeutet, dass sie nicht geändert werden können, nachdem sie erstellt wurden. Wenn Sie also etwas wie string s1 = "aaa"; s1 += "bbb"; machen, wird tatsächlich eine völlig neue Zeichenkette erstellt, anstatt nur das Original hinzuzufügen. StringBuilder ist dagegen veränderbar, sodass Sie sich nicht jedes Mal darum sorgen müssen, dass Sie mehrere Strings neu zuweisen, wenn Sie Strings verketten wollen (was mit zunehmender Streicherlänge immer langsamer wird).

Zweitens können Sie Char.IsLetterOrDigit statt Vergleiche verwenden. Die Methode nimmt eine char als Eingabe und gibt True zurück, wenn das Zeichen ein Buchstabe (Groß- oder Kleinbuchstaben) oder eine Zahl ist. Dies entspricht direkt Ihrem gewünschten Bereich a-z, A-Z und 0-9. Da Sie sich jedoch auch für Leerzeichen interessieren, müssen Sie dies manuell überprüfen.

+0

Ich habe nicht abgelehnt, jemand anderes hat das getan. –

+0

https://msdn.microsoft.com/en-us/library/cay4xx2f(v=vs.110).aspx - vorschlägt, IsLetterOrDigit verwenden, um ASCII-Buchstaben zu erkennen macht absolut keinen Sinn (auch ich unterstütze etwas Trolling OP mit ungültiger Lösung - aber es sieht nicht so aus, als wäre es dein Ziel. –

+0

@AlexeiLevenkov Hast du den Fragetext gelesen? OPs Ziel ist es, Buchstaben im Bereich von "a-z", "A-Z", "0-9" und Leerzeichen zu erhalten. – Abion47

Verwandte Themen