Strängar
↑Snabböversikt
Section titled “Snabböversikt”En sträng innehåller text som en ordnad följd av tecken. En string i C# är oföränderlig. Metoder som verkar ändra innehållet returnerar normalt en ny sträng.
Tecken och index
Section titled “Tecken och index”Prova själv
En C#-sträng är oföränderlig. Här visar vi teckenindex.
En C#-sträng är oföränderlig. Här visar vi teckenindex.
Välj ett tecken för att se dess index. Strängen ändras inte.
Index och längd
Section titled “Index och längd”string name = "HELLO";Console.WriteLine(name.Length); // 5 UTF-16-kodenheterConsole.WriteLine(name[1]); // Estring result = name.Replace("L", "R");Console.WriteLine(name); // Fortfarande HELLO#include <string>#include <iostream>std::string name = "HELLO";std::cout << name.size() << '\n'; // bytes, not Unicode charactersstd::cout << name[1] << '\n'; // Estd::string result = name;for (char& ch : result) if (ch == 'L') ch = 'R';std::cout << name << '\n'; // Still HELLOVarför spelar oföränderlighet roll?
Section titled “Varför spelar oföränderlighet roll?”Om du sammanfogar strängar många gånger i en stor loop kan nya tillfälliga strängobjekt skapas vid varje steg. StringBuilder passar ofta bättre när text byggs upp stegvis.
var builder = new System.Text.StringBuilder();foreach (string word in words) builder.Append(word);string sentence = builder.ToString();#include <string>#include <vector>std::string sentence;for (const std::string& word : words) sentence += word;// Reserve capacity first when output size is predictable.Komplexitet
Section titled “Komplexitet”| Operation | Typisk komplexitet |
|---|---|
| Läs en UTF-16-kodenhet via index | O(1) |
| Gå igenom samtliga kodenheter | O(n) |
| Sök efter delsträng | Beror på algoritm och implementation |
| Slå ihop två strängar | O(n + m) för att kopiera texten |
Text är mer än synliga bokstäver
Section titled “Text är mer än synliga bokstäver”Unicode innehåller tecken som representeras av flera kodpunkter, och ett synligt tecken kan bestå av flera delar. I .NET räknar string.Length UTF-16-kodenheter, inte alltid tecken som människor uppfattar. I C++ räknar std::string::size() byte. Ingen av dem beskriver automatiskt antalet synliga symboler.
Jämförelse och normalisering
Section titled “Jämförelse och normalisering”Välj tydligt om jämförelsen ska vara exakt, ignorera versaler och gemener eller följa språkliga regler. Det spelar roll för användarnamn, sökning och filnamn. Unicode-normalisering kan behövas om visuellt identiska strängar har olika representation.
Bygg strängar effektivt
Section titled “Bygg strängar effektivt”Upprepad konkatenering i en loop kan skapa många nya strängar. I C# kan StringBuilder minska allokeringarna. I C++ kan det hjälpa att reservera kapacitet i std::string.
