webForumDet fria alternativet

hur göra...

5 svar · 479 visningar · startad av tarfala

tarfalaMedlem sedan juli 2000177 inlägg
#1

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

PeWMedlem sedan juni 200010 432 inlägg
#2

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.

:)

BrimbaMedlem sedan dec. 19995 875 inlägg
#3

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;
			}
	} 
}
tarfalaMedlem sedan juli 2000177 inlägg
#4

öh..

kan du förklara koden begriper inte riktigt...
:e

BrimbaMedlem sedan dec. 19995 875 inlägg
#5

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!

tarfalaMedlem sedan juli 2000177 inlägg
#6

stort tack!!

STORT TACK ! Brimba
nu ramlade 5 öringen ner och allting klarnade

136 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)