Sigdal Skrevet 17. juli 2010 Del Skrevet 17. juli 2010 Jeg trenger å få ett sett med skrevne 1-ords tekstrenger (definert i en headerfil, f.eks) importert inn i ett sett med stringobjekter (slik at jeg kan bruke metodene der til å manipulere: kopiere, slette, skyte inn bokstaver, etc, i en ny, resulterende tekstreng). Jeg må kunne velge hvilken tekstreng jeg vil kopiere fra vha en integervariabel. Jeg trenger ikke noen nulltermineringer av noe slag. Noen som har tips hvordan gjøre det enklest? String-klassen ser fristende ut.. mvh Sigdal Lenke til kommentar
Hårek Skrevet 17. juli 2010 Del Skrevet 17. juli 2010 Hvis jeg forstår deg rett så bør du vel definere de som array of stings. Eks: string[,] siblings = new string[,] { {"Mike","Amy"}, {"Mary","Albert"} }; Lenke til kommentar
Sigdal Skrevet 18. juli 2010 Forfatter Del Skrevet 18. juli 2010 (endret) Ja, det er riktig, men det holder at arrayen er endimensjonal. (jeg får den ikke til å kompilere. Feilmeldinger: error C2143 syntax error : missing before..... [ , { og } .) Endret 18. juli 2010 av Sigdal Lenke til kommentar
Hårek Skrevet 18. juli 2010 Del Skrevet 18. juli 2010 Endimensjonal eksempel: string[] siblings = new string[] { "Mike", "Amy", "Mary", "Albert" }; Lenke til kommentar
Sigdal Skrevet 18. juli 2010 Forfatter Del Skrevet 18. juli 2010 (endret) Jeg får fortsatt de samme feilmeldingene. Hva er feil her? Ide'en Visual C++ 6.0 (som er helt OK for numerisk arbeid.) #include <stdlib.h> #include "stdafx.h" #include <string> using std::string; void main() { string[] siblings = new string[]{"Mike","Amy", "Mary","Albert"}; } Edit: string siblings[] = {"Mary", "Albert"}; kompilerer fint, men dette lagres da på Stacken og ikke Heap. Hvordan få det på Heapen? Endret 18. juli 2010 av Sigdal Lenke til kommentar
Sigdal Skrevet 18. juli 2010 Forfatter Del Skrevet 18. juli 2010 (endret) (nesten) Løst. Endret 18. juli 2010 av Sigdal Lenke til kommentar
Sigdal Skrevet 18. juli 2010 Forfatter Del Skrevet 18. juli 2010 Hvordan må headerfilen modifiseres for å inneholde initialiseringen av stringobjektene (evt. hvordan kan initialiseringen av stringobjektene holdes adskilt fra cpp-filen)? Lenke til kommentar
[kami] Skrevet 18. juli 2010 Del Skrevet 18. juli 2010 Hvordan må headerfilen modifiseres for å inneholde initialiseringen av stringobjektene (evt. hvordan kan initialiseringen av stringobjektene holdes adskilt fra cpp-filen)? enten så putter du det på stacken ved å deklarere det: string some_array[] = {"dill", "dall"}; eller så lager du en init() funksjon som du kaller ved program start (en ganske vanlig løsning). Stort sett så deklarerer du stuff i header fila, mens c++ fila brukes til implementasjonen. Dette er litt for å løse sirkulære dependencies (at klasse a trenger klasse b for å kompileres, mens klasse b trenger klasse a.). I større prosjekter kan det hende du må flytte ting til cpp fila, rett og slett for å få ting til å kompilere. I ditt tilfelle, om du skal ha stringbitene på heapen, vil header fila typisk se slik ut: string* [100] streng_array; void init_streng_array(); mens cpp fila har void init_streng_array() { streng_array[0] = new std::strin("dill"); .... } jeg vil sterkt anbefale en stack løsning her dog. Lenke til kommentar
Sigdal Skrevet 19. juli 2010 Forfatter Del Skrevet 19. juli 2010 (endret) Ok. Men er det mulig å gjøre både deklarasjon og initialisering av strengene i headerfilan? Det er mest initialiseringen, 'some_array[] = {"tesktstrengnr1", ... , "tekstrengnr100" };', som jeg helst vil ha i en separat fil, fordi jeg antakelig vil inn og forandre på strengene og rekompilere i ettertid. Det vil være mindre risikabelt med en sånn løsning. Objektene bør ligge på stacken. Endret 19. juli 2010 av Sigdal Lenke til kommentar
Sigdal Skrevet 20. juli 2010 Forfatter Del Skrevet 20. juli 2010 (endret) #include <stdlib.h> #include "stdafx.h" #include <iostream.h> #include <time.h> #include "test.h" void main() { cout << strenger[3].c_str(); } Med header fila: #ifndef TEST_H #define TEST_H #include <string> using std::string; string strenger[] = { "streng1", "streng2", "streng3","streng4" }; #endif Løst. Endret 20. juli 2010 av Sigdal Lenke til kommentar
zotbar1234 Skrevet 21. juli 2010 Del Skrevet 21. juli 2010 cout << strenger[3].c_str(); Hvorfor ikke bare: std::cout << strenger[3]; ? Lenke til kommentar
Sigdal Skrevet 21. juli 2010 Forfatter Del Skrevet 21. juli 2010 (endret) Ingen anelse. Ser det er noe som heter 'endl' også, men har ikke satt meg inn i hva den gjør... Endret 21. juli 2010 av Sigdal Lenke til kommentar
[kami] Skrevet 30. juli 2010 Del Skrevet 30. juli 2010 Endl printer ny linje. std::endl flusher også output bufferen, noe som garanterer at outputten din kommer etter du har brukt endl. om du bruker \n er du ikke garantert dette. (kjekt når du skriver til fil) Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå