• No results found

string C++ Lektion string

N/A
N/A
Protected

Academic year: 2021

Share "string C++ Lektion string"

Copied!
4
0
0

Loading.... (view fulltext now)

Full text

(1)

Värmdö Gymnasium Programmering B Datainstitutionen

C++ Lektion String.doc

Sida 1

C++ Lektion string

Funktioner för hantering av textsträngar, string -paketet

Eftersom det är knöligt att jämföra, tilldela, och lägga ihop olika teckenfält, finns det till vår hjälp ett färdigt paket med strängfunktioner. Du måste för att få tillgång till dessa funktioner inkludera filen string.

#include <string>

Gör nu dessa deklarationer:

string a="abc", b="def";

Du kan nu tilldela värden på det vanliga sättet, a=b (det hade inte gått med vanliga teckensträngar t.ex.

a[10]). Du kan också nu jämföra strängar med varandra på vanligt sätt, t.ex. a==b. Ytterligare funktioner finns på s. 95 i boken, bl.a. a.size() som ger textsträngens längd exklusive nolltecknet.

Du kan också jämföra vilken teckensträng som är ”störst” t.ex.om vi tilldelar a=”ffff”och b=”fffdsewq”

gäller att a är större än b. a>b är TRUE. Tecknena jämförs var för sig och stora bokstäver är alltid mindre än små!! t.ex a=”fFff”och b=”fdff” . a>b är FALSE. Vi passar på att varna för ÅÄÖ, som du ser på teckentabellen har andra värden.

Man kommer åt de tecken som ingår i strängen på vanligt sätt t.ex. cout << a[1] ger ”b”.

OBS! getline(cin,s) för att läsa in hel rad (jämför syntax cin.getline(s,20) för char s[20]).

Testa följande kod med olika strängar, så du får klart för dig hur strängarna värderas.

//string1.cpp

#include <iostream>

#include <string>

using namespace std;

main() {

string text1,text2,text3;

cout << "Skriv in två strängar, (När du vill avsluta programmet, tryck CTRL+C):" << endl;

while(cin >> text1 >> text2) // TRUE så länge inmatning fungerar {

if (text1 == text2)

cout << text1 << " är lika stor som " << text2 << endl;

else if (text1 > text2)

cout << text1 << " är större än " << text2 << endl;

else

cout << text2 << " är större än " << text1 << endl;

text3 = text1 + text2;

cout << "Antal tecken i den sammanslagna strängen är " <<

text3.length() << endl;

}

system("PAUSE");

return 0;

}

(2)

Värmdö Gymnasium Programmering B Datainstitutionen

C++ Lektion String.doc

Sida 2

Exempelfiler

//string2.cpp

#include <iostream>

#include <string>

using namespace std;

main() {

string namn, s, s2;

int x;

cout << " Vad heter du:" << endl;

cin >> namn;

cout << "Hejsan " << namn << endl;

s=namn;

cout << "s= " << s << endl<<endl;

s="Super"+namn+'!';

cout << "Du är " << s << endl;

s2.assign(s,0,5); //tilldela(sträng, startposition, antal tecken) s2.at(0)='D'; //ändra ett tecken( position)

s.insert(5,s2); //skjut in sträng(startpos, sträng) x=s.size(); //längden av strängen s

s.replace(x-1,1,"*"); //ersätt i strängen s(från position, antal tecken, sträng)

cout << "Du är " << s << endl;

system("PAUSE");

}

// variabeln namn är ett teckenfält som vi inte behöver bestämma längd på //

// skriv in för och efternamn, vad händer ??

// inläsningen avbryts då ett vitt tecken påträffas, cin-operatorn är orsaken //

// getline(cin, namn);

// cin är vartifrån och namn är den variabel strängen ska in i //

// kan även initiera i deklarationen: namn="Kalle" (citationstecken runt)

(3)

Värmdö Gymnasium Programmering B Datainstitutionen

C++ Lektion String.doc

Sida 3

// string3.cpp

// För att kunna hantera textsträngar behövs hjälpfunktioner // vi måste då inkludera #include <string>

// de vanligaste funktionerna är

// s1 = s2 från s2 till s1

// s1 = s2.substring(k,n) kopierar n tecken från s2 med början från k:e tecknet // s1 == s2 jämför två textsträngar

// s1.length() ger längden av strängen s //

// andra bra funktioner:

// size() ( samma som length() )

// append() insert() replace() find()

#include <iostream>

#include <string>

using namespace std;

main()

{ string us, swed;

int x;

cout << "US datum xx/xx/xx " << endl;

cin >> us;

x=us.size();

cout<<x<<endl;

swed="20"+us.substr(6,2)+"-"+us.substr(0,2)+"-"+us.substr(3,2);

cout << "På svenskt sätt skrivs datumet som " << swed << endl;

system("PAUSE");

return 0;

}

********************************************************************************************

// getline_string.CPP

//använd getline för att läsa in hela rader inklusive mellanslag //OBS! getline(cin,s) för att läsa in hel rad (jämför syntax cin.getline(s,20) för char s[20])

#include <iostream>

#include <string>

using namespace std;

main(){

int tal;

string s;

cout<<"Skriv in ett tal: ";

cin>>tal;

cout<<"Talet var :"<<tal<<endl;

cout<<"Skriv in två ord : ";

fflush(stdin); // OBS! Säkerställer att det inte ligger något gammalt i inmatningsströmmen

getline(cin,s); // OBS! Getline klarar hel mening cout<<"Ordet var : "<<s<<endl;

cout<<"Skriv in två ord : ";

fflush(stdin); // OBS! Säkerställer att det inte ligger något gammal i inmatningsströmmen

cin>>s ; // OBS! cin används sista ordet slängs i nästa flush cout<<"Ordet var : "<<s<<endl;

cout<<"Skriv in två ord : ";

fflush(stdin); //utan flush används det slängda ordet från förra

meningen

getline(cin,s);

cout<<"Ordet var : "<<s<<endl;

system("PAUSE");

}

(4)

Värmdö Gymnasium Programmering B Datainstitutionen

C++ Lektion String.doc

Sida 4

Titta igenom exempelfilerna så att du förstår deras funktion.

Övningar

Övningar på tecken och strängar, stringpaketet ska nu användas. . 1. Skapa en meny med hopp till funktioner .

OBS! För enkelhetens skull görs, för varje val, allt i själva funktionen.

På menyn ska finnas

a räkna antal tecken

b vänd på meningen/ordet

c byt till stora tecken d byt till små tecken e jämför två strängar

f kopiera en sträng till en annan g plocka ut n tecken från vänster h plocka ut n tecken från höger

x plocka ut delsträng (t.ex. delstrang(sträng, start, antal tecken)).

y hur många gånger förekommer ett ord i meningen z lägg till en sträng på ett visst ställe i en annan sträng OBS! Valet y är svårt att skapa.

2. Skriv ett program som läser in ett personnummer och avgör om personen är man eller kvinna. ( Den näst sista siffran är udda för män och jämn för kvinnor.)

3. Skriv ett program som läser in ett datum på amerikansk form 22/11/97 och lägger över det i en ny variabel på den svenska formen 19åå-mm-dd . Skriv sen ut båda datumen.

4. Skriv ett program som läser in dagens datum på formen 19åå-mm-dd , dvs en textsträng. Sen läser du in en persons födelsedag på formen ååmmdd och skriver ut Grattis! Om personen har födelsedag annars Osis! .

5. I Astrid Lindgrens Kalle Blomqvist-böcker beskrivs ett ”hemligt språk”, det s k rövarspråket. Det bildas genom att alla konsonanter dubbleras samtidigt som bokstaven ”o” placeras mellan dem.

Vokaler och andra tecken blir oförändrade.

T ex : Kalle Anka blir KoKalollole Anonkoka

Skriv ett program som översätter en text till rövarspråket.

6. Skriv ett program som krypterar innehållet i en textsträng genom att byta ut varje bokstav i strängen mot en viss annan bokstav. Tänk efter hur man bäst lagrar krypteringsinformationen.

Skriv också ett program som dekrypterar en krypterad textsträng, dvs som återskapar den ursprungliga texten.

Läxa

Läs i C++ manualen på nätet kap18 om tecken och strängar med string-paketet. Titta igenom exempelfilernas källkod och se till att du förstår deras funktion.

Maila de uppgifter du klarar av senast onsdagkväll.

References

Related documents

This thesis focuses on nine children’s use of texts and literacy learning, both inside and outside of school, in a multilingual and multicultural set- ting in Sweden.. The

Vi ser att könsmaktsordning ligger till grund för mäns våld mot kvinnor i nära relationer men att det inte kan förklara varför alla män inte utövar våld vilket betyder att

Nu har turen kommit till skulptören Asmund Arle och målaren Staffan Hallström... Hallströms och Arles konstnärskap utmärks av en stor integritet och båda framträdde på

Dylika svar bekräftar tidigare forskning som framhåller vinsterna med formativ bedömning och svarar därför jakande till denna uppsats huvudfråga; om huruvida ett formativt

Och att våga erkänna för sig själv, något som bibliotekarier ju absolut inte får göra, att just den boken – nej, den tänker jag faktiskt inte läsa.. När jag var barn gillade

The Quartet has collaborated with some of this generation’s most important composers, including Gunther Schuller, John Cage, Gyorgy Ligeti, Steve Reich, Osvaldo Golijov,

Borromeo’s visionary performances include both fresh interpretations of the classical music canon and works by 20 th and 21 st century composers.. MAY 5,

The Quartet has collaborated with some of this generation’s most important composers, includ- ing Gunther Schuller, John Cage, Gyorgy Ligeti, Steve Reich, Osvaldo Golijov,