Waarschijnlijk wil je meer dan één woord omzetten ?
Code:
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
std::string convert(const std::string s)
{
std::string ret;
for(unsigned int i = 0; i < s.length(); i++)
ret += (isalpha(s[i]) ? (i & 1 == 1 ? tolower(s[i]) : toupper(s[i])) : s[i]);
return ret;
}
int main(int argc, char *argv[])
{
std::string s;
while(1)
{
std::cout << "Input: ";
std::getline(std::cin, s);
if(s == "quit")
break;
std::cout << "Output: " << convert(s) << '\n';
}
system("PAUSE");
return EXIT_SUCCESS;
}
Wanneer er nu 'quit' wordt ingevoerd stopt het programma. (is hoofdlettergevoelig op deze manier, maar gaat om het idee)
(heb de convert functie maar meteen wat korter gemaakt (netter is uiteraard relatief))
edit: even wat toelichting voor de TS, aangezien hij net begonnen is met C++;
Het std:: voor cout is de namespace die gebruikt wordt. Als je een standaard project aanmaakt, dan is meestal de regel 'using namespace std;' toegevoegd, waardoor je het 'std::' gedeelte weg kan laten. Al ziet dit er voor een beginner wat ingewikkelder uit dan het eigenlijk is.
Code:
ret += ( i & 1 == 1 ? tolower(s[i]) : toupper(s[i]));
Dit is eigenlijk gewoon een if-else statement. Het eerste gedeelte is de voorwaarde die gecontroleerd wordt, het gedeelte achter de vraagteken is hetgeen
uitgevoerd wordt wanneer de voorwaarde waar is en het gedeelte achter de dubbelepunt is hetgeen wat uitgevoerd wordt wanneer de voorwaarde niet waar is.
Het wordt dus:
voorwaarde ? wanneer_true : wanneer_false;
Dit komt dus eigenlijk op hetzelfde neer als:
Code:
if(i & 1 == 1) // hier wordt (bitwise) gecontroleerd of het getal een (on)even getal is; Bij oneven getallen levert dit true op;
ret += tolower(s[i]); // je kunt hiervoor ook de modulo operator gebruiken, dat is misschien makkelijker voor je.
else
ret += toupper(s[i]);
Ik hoop dat de code nu iets duidelijker is.
