hej !
jag håller på med ett program där användaren skall mata in sitt namn för och efternamn i en enda variabel. då namnet sen skrivs ut skall efternamnet skrivas ut först.vilken funktion skall jag anropa???? :q
hur göra...
5 svar · 479 visningar · startad av tarfala
Tja... du kan ju t.ex använda strings find() för att hitta blanksteget och substr() för att plocka ut det som finns efter blanksteget. Eller så loopar du och gör samma sak tecken för tecken i loopen.
:)
Om du inte vill ha en lösning, så blunda nu!
Jag säger dock inte att lösningen är den bästa, men det är iaf en lösning :e
#include <iostream>
#include <string>
using namespace std;
main()
{
string namn;
bool loop = true;
while (loop)
{
cout << "Skriv ditt namn: ";
getline(cin, namn);
if(namn[0] == '\0')
loop = false;
else
if (namn.find(' ') == string::npos)
cout << "Du måste ange både för- och efternamn!" << endl;
else
{
int spacePos = namn.find(' ');
namn[0] += -32;
namn[spacePos+1] += -32;
cout << namn.substr(spacePos+1,namn.size()) << ", "<< namn.substr(0,spacePos) << endl;
}
}
}
string namn;
Deklarerar namn som string
bool loop = true;
Deklarerar loop som boolesk och ger den värdet true
cout << "Skriv ditt namn: ";
skriver ut "Skriv ditt namn: " på skärmen
getline(cin, namn);
Läser av den inskrivna informationen och placerar den i variabeln namn. Fördelen med getline istället för enbart cin är att den läser även whitespaces.
if(namn[0] == '\0')
loop = false;
om tecken 0 är \0 så sätt variabeln loop till false
Här går det att göra en namn.length() kontroll istället, vilket säkert är bättre
else
annars
if (namn.find(' ') == string::npos)
Här kollar den efter ett mellanslag i variabeln namn.
Om det finns ett mellanslag returneras platsen för mellanslaget, annars returneras string::npos
int spacePos = namn.find(' ');
deklarerar variabeln spacePos till integer och ger den värdet av den första spacens plats.
namn[0] += -32;
variabeln namns första bokstav får värdet av -32 -tecken, vilket resulterar i att patrik blir Patrik
namn[spacePos+1] += -32;
variabeln namns förstabokstav efter spaceposition får stor bokstav.
cout << namn.substr(spacePos+1,namn.size()) <<
substr plockar ut stängar ungefär som mid() i VBScript.
variabeln namn.subst.. .spacePos+1 till slutet av namn. Vilket innebär att den letar upp spacen, går ett tecken fram och skriver sedan ut därifrån fram till slutet.
", "
skriver ut ett komma
<< namn.substr(0,spacePos) << endl;
här är substr igen. Men här går den från tecken 0 till spacePos.
Lycka till!