Gå til innhold

C++ splitte funksjon?


Anbefalte innlegg

Hei!

Søkt på nettet og finner bare char funksjoner, å siden jeg ikke vet hvordan jeg konvertere chars til strings uten en lang omvei så tenkte jeg, jeg skulle spørre her, så :

spm 1)

Hvordan får jeg splittet opp en string, som f.eks "ord1 ord2 ord3" inn til en array, så jeg kan få d ut senere med Ord(0), Ord(1), Ord(2)?

 

spm 2)

Hvordan konverterer man mellom datatypene(char, string, int, double, float, osv)?

Lenke til kommentar
Videoannonse
Annonse

Spm1: Vel, du kan bruke stringstreams.

 

#include <string.h>
#include <iostream>
#include <sstream>

// Ting og tang utelatt. chararray = string som char

using namespace std;

string s(chararray);
string token;
int i = 0;
istringstream iss(s);

while(!(iss >> token).fail())
 cout << "Ord" << (i++) << token; //Eller putt token i array hvis du vil

cout << endl;

 

spm2:

Det er finnes mange måter å konverte imellom typer. Kan bruke stringstreams for string konvertering her også.

 

int i;
float f;
string s("14.22");
istringstream iss(s);

//Fra string til float
if(!(iss >> f).fail())
 cout << "Tallet som float: " << f << endl;

//Fra float til int. Generelt alle numeriske verdier kan type-castes
// til andre typer ved å skrive: variabel1 = (type) variabel2;
i = (int) f;
cout << "Tallet som int: " << i << endl;

//Fra string til char array
printf("Tallet som char array: %s \n", s.c_str());

Lenke til kommentar

Å bruke stringstreams er veldig tregt, så om du kan unngå det så gjør man det.. C++ har en fin funksjon som heter substr. Den blir brukt på denne måten s.substr(start,antall). Hvor s er stringen, start er hvor det intervallet man skal ha starter, og antall er antall man skal ha med.. Her er en funksjon som mottar en string og retunerer en vector..

 

vector<string> split(const string& s){
vector<string> ret;
int i = 0;

while(i != s.size()){
	while(isspace(s[i])) ++i;

	int j = i;
	while(!isspace(s[j])) ++j;

	if(i != j) ret.push_back(s.substr(i,j-i));
	i = j;
}
return ret;
}

 

isspace er en funksjon som mottar en char og retunerer true om char'en er et mellomrom, ellers retunerer den false.

 

Ved konventering fra char til int kan du bruke det faktum at man kan trekke chars fra hverandre og få en int i retur. Om du skal vite verdien av charen a, så bruker du a - '0'..

 

Ved string til int og omvendt kan du hente ut siffer etter siffer og multiplisere ut med hvilken tierpotens sifferet skal ha..

//stringen s inneholder tallet
int m = 1;
int tall = 0;
int i = s.size()-1; //refererer til det siste elementet i stringen..

while(i >= 0){
tall += (s[i]-'0') * m;
++i;
m *= 10;
}
//tall inneholder nå det samme tallet som s

 

Konvertering mellom double og int går fint med "=". Du vil få en advarsel ved konventering. Int til double er ikke noe problem, men andre veien må du være ops på at om du skriver int = double og double'n inneholder 3.999 vil int'en få verdien 3. Dette kan du forhindre (om du ønsker det) ved å legge 0.5 til double'n før du sier int = double.

 

Du må rett og slett være litt kreativ.. Men det kan være greit å kunne bruke stringstreams også, og det er ikke så vanskelig å lære, så lær deg det også når du først er i gang ;)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...