August 10, 2001
Hej alla!
Jag undrar om någon vet ett smidigt och enkelt sätt att lagra ett antal strängar som användaren ska mata in. Användaren ska själv bestämma hur många strängar han ska mata in och hur långa de ska vara.
Jag har försökt kolla lite på 2-dimensionella vektorer men vet inte hur jag ska göra riktigt.
PS. Jag är nybörjare så inga jätteavancerade lösningar, he he DS.
August 29, 2001
Typ så här lr?
Först så matar han in en nuffra:
#include "iostream.h" //gör att man kan visa text och mata int data
void main( void )
{
cout << "Mata in en nuffra: "; //Skriver lite text...
int nuffra; //Skapar en int(heltal)
cin >> nuffra; //Spara det man matade in i nuffra
char *texter[nuffra]; //Skapar en lista med strängar(egentligen en pekare till en lista w/ strängar....Skit i det)
for( int x = 0; x < nuffra; x++ ) //Gör en liten loop
cin >> texter[x]; //Sparar det man matar in i texter[x]
for( int x = 0; x < nuffra; x++ ) //Gör en till liten loop
cout << texter[x] << "n"; //Bara för att kolla att det funkar
}
Detta var ett hyffsat basic prog...Finns säkert bättre sät att göra detta oxå...
_________________
1200TB @ 1333, 1400 el. 1466. Beror på humör
256 SDRAM
30GB HD @ 7200 RPM
GeForce2 MX 400 AGP
8x8x32x RW-Brännare
12x DVD-ROM
2 x D-Link DFE-530TX PCI Fast Ethernet Adapter (Rev A)
[ Detta Inlägg ändrades av: Tjoppen den 2001-10-31 15:58 ]
August 2, 2001
char *texter[nuffra]; //Skapar en lista med strängar(egentligen en pekare till en lista w/ strängar....Skit i det)
for( int x = 0; x < nuffra; x++ ) //Gör en liten loop
cin >> texter[x]; //Sparar det man matar in i texter[x] den 2001-10-31 15:58 ]
Detta funkar inte eftersom texter[x] inte pekar till något och cin>> ej automatiskt allokerar minne till det som texter[x] pekar på. texter[x] måste peka till en buffer som cin >> fyller med data.
Enklast är dock att använda en array med strängar så slipper man detta problem med att allokera en buffer att skriva till.
void main( void )
{
const int MAX_STRING_SIZE = 10;
cout << "Mata in en nuffra: ";
int nuffra;
cin >> nuffra;
char **texter = new char*[nuffra]; //array med nuffra st. char* pekare.
for( int i = 0; i < nuffra; i++ ) {
texter[i] = new char[MAX_STRING_SIZE]; //allokera en buffer att skriva till för varje charpekare
cin >> texter[i]; //skriv till char bufferten som char pekaren pekar på
}
for( int i = 0; i < nuffra; i++ ) //kolla att det funkar
cout << texter[i] << endl;
//char ** används mest om man kodar c i c++ så används vanligen string
//"slipper" att ta hand om minneshanteringen själv
cout << "Mata in en nuffra: "; //Skriver lite text...
cin >> nuffra;
std::string *str_texter = new std::string[nuffra]; //array med nuffra st strängar
for( int i = 0; i < nuffra; i++ )
cin >> str_texter[i]; //skriv till en string
for( int i = 0; i < nuffra; i++ ) //kolla att det funkar
cout << str_texter[i] << endl;
}
November 20, 2001
Och VAD är det för fel på STL? Särskilt om man vill göra det enkelt för sig. Har man en hyggligt ny C++-implementation så kan man göra ungefär så här:
#include
#include
using std::string;
using std::cin;
using std::cout;
using std::endl;
int main()
{
cout << "Antal strängar: ";
int num_strings;
cin >> num_strings;
/* Skapa en array av STL-strängar */
string *strs = new string[num_strings];
/* Läs in strängarna */
for (int i = 0; i < num_strings; i++) {
cout << "Sträng " << i + 1 << ": ";
cin >> strs[i];
}
/* Testa genom att skriva ut strängarna */
for (int i = 0; i < num_strings; i++) {
cout << strs[i] << endl;
}
/*
* Gör det till en vana att fria minnet
* när du är klar med en pekare, en
* array eller ett objekt. Här används
* delete[] och inte delete, eftersom
* strs är en array.
*/
delete[] strs;
}
Det finns många bra tutorials i C++ på webben. När du letar, se dock till att kolla att det som beskrivs är ISO C++ och att det står saker om STL (Standard Template Library) - något som nu är en central del av C++.
1 Guest(s)