1 |
On Tuesday 21 March 2006 17:38, Karsten Langeloh wrote: |
2 |
|
3 |
> > Hallo,Welt! |
4 |
> > H,leoWatll! |
5 |
> |
6 |
> wobei sich das durch die Implementation der Beruecksichtigung der |
7 |
> Sonderzeichen beheben laesst, und ausserdem macht man nach dem |
8 |
> Komma ein Leerzeichen :P |
9 |
ja normal schon aber da es ja nachher fuer nen chat gebraucht wird und man da |
10 |
schnell tippt kann man sowas schon einmal vergessen |
11 |
|
12 |
und bei perl geht es ja :) |
13 |
|
14 |
nur leider kann ich kein perl das ist ne sprache die ich wohl noch lernen muss |
15 |
|
16 |
aber ich poste jetzt auch mal meine loesung :) |
17 |
|
18 |
ist sehr chaotisch da ich erst seit gestern richtig c++ an der fh hab :) |
19 |
|
20 |
und vorher nur c gemacht und etwas c++ |
21 |
|
22 |
mfg |
23 |
daniel |
24 |
|
25 |
codeteile: |
26 |
|
27 |
class MixWords |
28 |
{ |
29 |
private: |
30 |
string msg_; |
31 |
unsigned short int max_; |
32 |
public: |
33 |
MixWords(string str, int max); |
34 |
void setMsg(string str, int max); |
35 |
void setMsg(string str); |
36 |
void printMixedStr(void); |
37 |
string mixing(string word); |
38 |
}; |
39 |
|
40 |
string MixWords::mixing(string word) |
41 |
{ |
42 |
if(word.length()<=3){ |
43 |
// Keine Aenderungn moeglich |
44 |
return word; |
45 |
} |
46 |
|
47 |
string mixed; |
48 |
int diff(word.length()-2); // anzahl zeichen die gemixt werden muessen |
49 |
mixed=word[0]; // erstes Zeichen bleibt immer |
50 |
while(diff>2){ |
51 |
int cur(rand()%diff--); // waehle zufaellig ein Zeichenindex |
52 |
mixed+=word[++cur]; // Zeichen aus word an erste stelle von mixed |
53 |
schreiben |
54 |
// so wird die reihenfolge geaendert |
55 |
word.erase(cur,1); // loesche das eben geholte zeichen |
56 |
} |
57 |
// die letzten 2 zeichen noch drehen |
58 |
mixed+=word[word.length()-2]; |
59 |
mixed+=word[word.length()-3]; |
60 |
|
61 |
mixed+=word[word.length()-1]; // das letzte zeichen nicht vergessen |
62 |
|
63 |
return mixed; |
64 |
} |
65 |
|
66 |
void MixWords::printMixedStr(void) |
67 |
{ |
68 |
if(msg_.length()<=3){ |
69 |
// Keine Aenderung moeglich |
70 |
// Text ausgeben |
71 |
cout << msg_ << endl; |
72 |
return; |
73 |
} |
74 |
|
75 |
do{ |
76 |
// Wort holen |
77 |
char *word=new char[msg_.length()]; // auf nummer sicher gehen |
78 |
char typ; // <TAB>, <SPACE> |
79 |
sscanf(msg_.c_str(),"%s%c",word,&typ); |
80 |
// Pruefen ob letztes zeichen auch wirklich buchstabe ist a-z/A-Z |
81 |
string tmp(""); // fuer ! , . ... |
82 |
string curWord(word); // enthaelt auch ! , ... |
83 |
while((!( (curWord[curWord.length()-1]>='a' && |
84 |
curWord[curWord.length()-1]<='z') || |
85 |
(curWord[curWord.length()-1]>='A' && |
86 |
curWord[curWord.length()-1]<='Z') ) ) && |
87 |
!curWord.empty()){ |
88 |
tmp+=curWord[curWord.length()-1]; |
89 |
curWord.erase(curWord.length()-1,1); |
90 |
} |
91 |
// Wort mixen :) |
92 |
if(curWord.length()==msg_.length()){ |
93 |
typ='\0'; |
94 |
} |
95 |
curWord = mixing(curWord); |
96 |
// Wort ausgeben |
97 |
cout << curWord // gemixte Wort |
98 |
<< tmp // ! . ... |
99 |
<< typ; // Space oder Tab |
100 |
// Wort loeschen |
101 |
msg_.erase(0, curWord.length() + tmp.length() +1 ); // geht fuer mehrere |
102 |
woerter |
103 |
} while(!msg_.empty()); |
104 |
|
105 |
cout << endl; |
106 |
} |
107 |
|
108 |
-- |
109 |
gentoo-user-de@g.o mailing list |