| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: [C++] Buchstabe in einen Char Feld umwandeln im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo, nach dem ihr mit meinen Problem helfen konnten mit den Maxima, hab ich wieder mal ein Problem.... (Klausur ...
![]() |
| | #1 (permalink) | ||
| Senior Member | Anzeige Hallo, nach dem ihr mit meinen Problem helfen konnten mit den Maxima, hab ich wieder mal ein Problem.... (Klausur vorbereitung mehr oder weniger) Erstmal die eigentliche Aufgabe: Zitat:
Ich les mir die umzuwandelde Zeichenkette ein, durchsuche jedes einzeln Buchstaben und wandeln den entsprechend um. Bin da auf 2 Problem gestoßen. a) ü belegt zum Bsp in den Char Feld nur eine "Einheit", aber "u hingegen 2? Da muss ich also alles um 1 verschieben, richtig? Nur wie :/ b) Ich bekomme schon eine Umwandlung von f zu F nicht hin. Hier mal mein Code den ich erstmal zum laufen bekomme wollte eh ich mich direkt an die Umlaute ranmache. Code:
#include<iostream>
using namespace std;
char copystring(char string1[],char string2[],int len) //alle sachen übergeben
{
for(int i=0;i<len;i++)
{
switch(string1[i])
{
case "f":string1[i]="F";break; //ersetze kleines f mit F
default: string1[i]=string1[i]; //wenn nix gefunden dann behalte string bei
}
string2[i]=string1[i];
}
return string2;
}
int main()
{
int len = 100;
char string1[100];
char string2[100];
cin<<string1;
cout<<copystring(string1,string2,len);
system("PAUSE");
return 0;
} Zitat:
Danke für gute Tips
__________________ cu Chakky we are dreaming in digital we are living in realtime we are thinking in binary we are talking in IP welcome to our world | ||
| | |
| | #2 (permalink) |
| Registriert seit: 19.02.11 ![]() Likes: 1 | Zu Problem a): Dieses Problem könnte man mit Zeigern lösen, indem du das umzuwandelnde Zeichen auf ein Array mit der 'Größe' 2 zeigen lässt. Zu Problem b): Versuche einfach mal statt "F" 'F' zu verwenden(nur ein Anführungszeichen). Gruß Open_Geek
__________________ Man merkt erst, wie dumm ein Computer ist, wenn man versucht, ihm etwas beizubringen |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Registriert seit: 03.05.07 ![]() ![]() Likes: 50 | Zum grundlegenden Problem eine kleine Hilfe: Du erstellst dir zwei Arrays, eines doppelt so groß wie das andere (das ist schließlich der maximale Speicherverbrauch der durch die Umwandlung entstehen kann). Code: const unsigned int maxStringLength = 10; char sourceString[maxStringLength]; char targetString[2 * maxStringLength] (das folgende Beispiel ersetzt f durch 2F) Code: unsigned int iteratorSource = 0;
unsigned int iteratorTarget = 0;
while(iteratorSource < maxStringLength)
{
switch(sourceString[iteratorSource])
{
case 'f':
{
targetString[iteratorTarget] = '2';
++iteratorTarget;
targetString[iteratorTarget] = 'F';
} break;
default:
targetString[iteratorTarget] = sourceString[iteratorSource];
}
++iteratorSource;
++iteratorTarget;
} mfg benediktibk |
| | |
| | #4 (permalink) | |
| Senior Member Themenstarter | Zitat:
und den einen fehler habe ich auch gefunden man sollte << nicht mit >> verwechseln und umgedreht.hab das jetzt noch eine zeile mit Code: case 'ü':string1[i]='"u';break; Eine Variante mit Pointern wäre ein Lösung, da es aber nicht behandelt worden ist und expliziet ausgenommen wurden ist für die Klausur muss es auch eine lösung ohne der Pointervariante gehen... // oops zu lange zum antworten gebraucht
__________________ cu Chakky we are dreaming in digital we are living in realtime we are thinking in binary we are talking in IP welcome to our world Geändert von Chakky (15.06.11 um 20:15 Uhr) | |
| | |
| | #5 (permalink) | |
| Senior Member Themenstarter | sry für doppelpost Zitat:
den aktuellen Wert in String1 auf int casten (damit ich einen Hexawert bekomme, oder ist das schon falsch) und den dann laut Tabelle vergleichen, was mich irritiert ist das man ja im Hex auch Buchstaben hat, aber die variabel von hex bei mir eine integer ist. hier mein angepasster code Code: int iSource = 0; //start
int iTarget = 0;
int hex; //hexa wertspeichern
while(iSource < len)
{
hex = (int)string1[iSource]; //aktuellen string wert auf hex casten
// switch(string1[iSource])
switch(hex) //vergleichen
{
case '66': //hex wert für f
{
string2[iTarget] = '2';
++iTarget;
string2[iTarget] = 'F';
} break;
case 'F6':
{
string2[iTarget] = 'A';
++iTarget;
string2[iTarget] = 'A';
} break;
default:
string2[iTarget] = string1[iSource];
}
++iSource;
++iTarget;
}
__________________ cu Chakky we are dreaming in digital we are living in realtime we are thinking in binary we are talking in IP welcome to our world | |
| | |
| | #6 (permalink) | |
| Registriert seit: 21.08.10 ![]() Likes: 10 | Ahm, irgendwie passt da was nicht. Seit wann kann man denn mit einem Character, der als ASCII Zeichen interpretiert wird ein ü darstellen?! ASCII-Tabelle Der Prototyp müsste dann schon eher sowas sein: Code: char copystring(char *dest, wchar_t *source,int len) Zitat:
sowas wie int i = 97; char c = i; // c ist nun der Buchstabe a Oh, und der Switch-Case geht nicht. Wenn du auf Hex prüfen willst, mach sowas: switch(c) { case 0x61: break; } Geändert von blue182 (15.06.11 um 22:06 Uhr) | |
| | |
| | #7 (permalink) | |
| Senior Member Themenstarter | Ich hab jetzt auf dezimal geprüft, scheint einfacher zu sein.... wenn ich jetzt folgendes mache Code: dec = (int)string1[iSource]; //aktuellen string wert auf hex casten //mit ü getest
cout<<dec<<endl; teste ich das mit "a" dann bekomm ich Ordnungsgemäß die 97, kann es aber trotzdem nicht in der case ansprechen und dann ändern....bekomme nur die compiler meldung Zitat:
Code: case "97": //dezwert für irgendwas
__________________ cu Chakky we are dreaming in digital we are living in realtime we are thinking in binary we are talking in IP welcome to our world Geändert von Chakky (15.06.11 um 22:11 Uhr) | |
| | |
| | #8 (permalink) | ||
| Registriert seit: 21.08.10 ![]() Likes: 10 | Zitat:
Außerdem, wenn ein int einen Wert > +127 hat, dann wirst du bei einem Character einen Überlauf bemerken. int i = 128; char c = i; // c sollte den Wert -128 haben. Da es ab +127 zu einem Überlauf kommt Zitat:
Vergleich auf Hex: case 0x61: Vergleich auf Dezimal: case 97: Vergleich auf äquivalentes Zeichen (ASCII Code!): case 'a': In C/C++ unzulänglich ist: case "97": Geändert von blue182 (15.06.11 um 22:17 Uhr) | ||
| | |
| | #9 (permalink) | |
| Senior Member Themenstarter | Zitat:
was mich auch stutzig macht bei mir unter Win7 wird das ü entsprechend auf der Console richtig angezeigt, auf einen XP rechner wie in der Uni nicht.... Ok lässt der Compiler garnicht durch, dachte vorhins er lässt mich durch da waren aber noch die '.... //update ok also muss ich jetzt von den einzelen Buchstaben auf den Hex Wert kommen und den in der case Abfrage behandeln, kümmer ich mich morgen drum Danke dir erstmal!
__________________ cu Chakky we are dreaming in digital we are living in realtime we are thinking in binary we are talking in IP welcome to our world Geändert von Chakky (15.06.11 um 22:26 Uhr) | |
| | |
| | #10 (permalink) | ||
| Registriert seit: 21.08.10 ![]() Likes: 10 | Zitat:
Hab es mal grad probiert. Mac OS nutzt ausschliesslich ASCII: Code: #include <stdio.h>
int main() {
unsigned char uc;
uc = 252;
printf("%c; 0x%x\n", uc, uc);
return 0;
} Zitat:
Geändert von blue182 (15.06.11 um 22:47 Uhr) | ||
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |