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;
}
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)
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");
}
Värmdö Gymnasium Programmering B Datainstitutionen
C++ Lektion String.doc
Sida 4