Heeft uw auto pijn? Ga dan naar de onderdelenlijn
Het bedrijf waar ik met veel plezier werk - Mijn eigen vertrouwde domein
oogjes open, snaveltjes dicht
2) langslopen en voor elk element een -1 doen
3) Terugzetten in een string.
Dat c_str() had je zelf ook in een manual kunnen vinden
Dan ga ik er trouwens wel van uit dat je ANSI strings gebruikt (std::string dus), anders moet je even F1 drukken in je IDE om de method te vinden die hetzelfde doet als c_str()
Volgende keer graag even F1 drukken, of goed zoeken op het net
Veel succes ermee
Heropend op verzoek van MSalters
[ Voor 6% gewijzigd door Glimi op 30-12-2002 12:37 ]
Glimi schreef op 30 december 2002 @ 00:37:
1) std::string omzetten in een cStyleString ( c_str() )
nergens voor nodig, de operator [] is gewoon gedefinieerd voor std::string
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
[aan oisyn hieronder - ivm a word ' - lol had gisternacht echt geen goesting om dat op te zoeken ;]
[ Voor 20% gewijzigd door hobbit_be op 30-12-2002 21:25 ]
Een LUT is overigens wel een goede methode als je wilt dat bijvoorbeeld een é ook een d wordt, maar dan zul je met unicode of multibyte strings moeten werken (er zit ook wel een é in de europese extended ASCII tabel, maar die is dus niet standaard... dat is bij unicode wel zo)
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
voor de mensen die willen weten hoe
nou zo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
| /** * Hier komt de functie ontcijfer, zet elke leeter 1 terug. * * @param woord, is het word dat vertaalt wordt * * @return het oncijverde woord */ string Ontcijfer(string woord) { // declareer variable char myTijdelijk; // hier gaan we een for loop je alle letter doorlopen for (unsigned int i = 0; i < woord.size(); i++) { // hier halen we de character uit de string myTijdelijk = woord.at(i); // gaan we alle letter op "a" en "A" na 1 terug zetten // letters "a" en "A" worden omgezet in "z" en "Z" if ((myTijdelijk > 65) && (myTijdelijk < 91)) // Hoofdletters { myTijdelijk--; } else if ((myTijdelijk > 97) && (myTijdelijk < 123)) // kleine letters { myTijdelijk--; } else if ((myTijdelijk == 65) || (myTijdelijk == 97)) // "a" en "A" { myTijdelijk += 25; } // hier zetter we de letter terug woord.at(i) = myTijdelijk; } // sturen we dan het woord terug return woord; } |
Heeft uw auto pijn? Ga dan naar de onderdelenlijn
Het bedrijf waar ik met veel plezier werk - Mijn eigen vertrouwde domein
Verder: zo te zien heb je het helemaal zelf opgelost... wat was nou de aanleiding van je topic? Volgende keer wat beter in de documentatie kijken voor je een topic opent dus...
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
was gister avond al ruim 3 uur bezig en zag het echt totaal niet, al gezocht op inet en hier op got, maar kon het niet vinden..oisyn schreef op 30 December 2002 @ 15:12:
Verder: zo te zien heb je het helemaal zelf opgelost... wat was nou de aanleiding van je topic? Volgende keer wat beter in de documentatie kijken voor je een topic opent dus...
en vanochtend onder de douche dacht ik ineens van zo kan ik het ook doen.
en toen werkte het dus
maar tenminste iedereen bedankt
Heeft uw auto pijn? Ga dan naar de onderdelenlijn
Het bedrijf waar ik met veel plezier werk - Mijn eigen vertrouwde domein
Verder wou ik erop wijzen dat niet alle computers ASCII gebruiken (sterker nog, eigenlijk geen enkele - allemaal extensies, zoals ISO 8859-15 voor euro tekens, of Unicode). Dan kun je dus makkelijker c >= 'A' && c <= 'Z' schrijven. Dat is namelijk ongeveer wat je bedoelt; alleen is niet gegarandeerd dat 'B'=='A'+1 etc. (is wel erg gebruikelijk, maar sommige IBMs zijn dwars)
Hoe los je het dan op?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| char const lowercase[] = "abcdefghijklmnopqrstuvwxyza";
char const uppercase[] = "ABCDEFGHIJKMNOPQRSTUVWXIJZA";
char convert_char( char c )
{
char const *which = std::find ( lowercase, lowercase+sizeof(lowercase), c);
if ( which != lowercase+sizeof(lowercase) ) // found?
{
return *++which; // the next lowercase char
}
which = std::find ( uppercase, uppercase+sizeof(uppercase), c);
if ( which != uppercase+sizeof(uppercase) ) // found?
{
return *++which; // the next uppercase char
}
}
std::string convert_string( std::string s)
{
std::transform( s.begin, s.end(), &convert_char );
return s;
} |
De tweede 'a' in de string is om een special-case voor 'z' te vermijden. std::find vindt 'm nooit.
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein