webForumDet fria alternativet

STL String

6 svar · 326 visningar · startad av Alpha II

Alpha IIMedlem sedan maj 20002 993 inlägg
#1

Hur gör jag förljande saker med string klassen?

* Ersätter alla förekomster av ett ord med en sträng oberoende av gemener/versaler.
* Hitta ord oberoende av gemener/versaler.
* Ta bort alla mellanrum.
* Gör om en float till en string.
* Läsa in tal, både ints och floats, från en string..

PeWMedlem sedan juni 200010 432 inlägg
#2

Jag skulle nog löpa igenom texten bokstav för bokstav för att hitta förekomster av de kriterier du satt upp (en annan sträng, mellanrum, siffror och eventuell förekomst av siffra-punkt). För att kolla detta oavsett versal eller gemen skulle jag göra alla bokstäver gemena i min jämförelse. Ifall en matchning existerar blir denna en start på en tillståndsmaskin som sen tar han om jämförelser och eventuell kopiering av resterande tecken. Dvs en slags parser som följer de kriterier som du satt upp och gör det som du tänkt ska göras i de olika fallen.

Mig veterligen så finns det ingen färdig lösning för dina "problem" inom STL string, utan det blir nog till att ta itu med detta själv på "lågnivå" ifall du behöver en smidig lösning som inte tar på prestandan.

spangoMedlem sedan juni 20008 205 inlägg
#3

Att konvertera mellan strängar och olika datatyper kan man göra rätt enkelt med följande två små mallar:

#include <sstream>

template <class Out>
Out from_string(string in) {
  istringstream is(in);
  Out o;
  is >> o;
  return o;
}

template <class In>
string to_string(In in) {
  ostringstream os;
  os << in;
  return os.str();
}
// användning:
string x = to_string(13);
string y = to_string(3.14);
int i = from_string<int>(x);
double d = from_string<double>(y);

Kanske inte det mest effektiva, men smidigt. Allt som krävs för att mallarna ska funka är att operator<< och operator>> funkar för strömmar för den typ man vill konvertera till/från.

Alpha IIMedlem sedan maj 20002 993 inlägg
#4

Tack,

En till fråga. Jag vill hämta ett värde ur en map oberoende på om nyckeln är skriven i gemener eller versaler. Hur gör jag om en string till gemener?

Aleph_OneMedlem sedan juni 2003372 inlägg
#5

Du kan använda STLs transform

#include <string>
#include <algorithm>
#include <iostream>

int main()
{
  std::string foo("wF");
  std::transform(foo.begin(), foo.end(), foo.begin(), tolower);
  std::cout << foo << std::endl;
}
Alpha IIMedlem sedan maj 20002 993 inlägg
#6

Det går inte utan att skapa en extra string?

spangoMedlem sedan juni 20008 205 inlägg
#7

Jo, det är precis det som Aleph_ones version gör.

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