Mitt första lilla program.

C/C++

16 svar · 632 visningar · startad av Chavez

Medlem sedan maj 20001 953 inlägg
Trådstart#1

Hej på er!
Här kommer jag jag med min första direka C++ fråga (det kommer att bli fler, tro mig )
Koden nedan tar ju emot ett ord och skickar sedan tillbaka det baklänges. Här är det:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
#include <iostream>
#include <cstring>
using namespace std;
const int Arsize = 20;
int main()
{
cout << "Skriv ett ord: ";
char word[Arsize] ;
cin >> word;
for (int i = strlen(word) - 1; i >= 0; i--)
cout << word;
cout << "\n";
return 0;

}

Det skapar ju en vektor med plats för 20 tecken men hur gör jag så att programmet automatiskt räknar ut hur många tecken som det finns i strängen och sedan skapar en vektor efter det? Som det är nu så fixar det heller inte mellanslag. Hur fixar man det?

Säkert jätteenkla frågor men som jag sa, mitt första program. Så om någon skulle kunna ta och modifiera koden så att den räknar ut storleken på vektor samt gör så att det fixar mellanslag så vore jag glad.

Ps. Om jag har uttryckt mig klumpig så är det därför att jag inte känner mig så hemma i alla nya C++ termer än

Ha det!

Medlem sedan maj 20001 953 inlägg
#2

He he. Raden "cout << word;" i koden samt raden, "Skyll inte på mig, jag hade inte rösträtt (det saknas ett snedstreck så att det inte skall hända igen)" i min signatur skapade vissa problem därav den andra redigeringen

*Grrr*, detta var ju jobbigt

Medlem sedan juni 20001 839 inlägg
#3

att den inte fixar mellanslag skulle kunna bero på att du använder cin, använd cin.getline() istället
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
cin.getline(word, Arsize);

(Första: charvekorn där den inmatade datan ska läggas, den andra: storleken på charvektorn (för att undvika att minne skrivs över pga för liten vektor...))

Ok, vektor-storleks grejen:
Eftersom du inte vet hur många tecken användaren matar in i förväg så går det inte... det är bara att se till att ha en tillräckligt stor vektor...

Medlem sedan apr. 20003 971 inlägg
#4

Jag svarade till honom via ICQ. Men nu när du har svarat här så behöver jag kanske inte svara igen här.

Medlem sedan maj 20001 953 inlägg
#5

OK, tack för de snabba svaren. Från båda två. Då vet jag att jag kan räkna med detta forumet vid framtida problem

Medlem sedan feb. 20002 300 inlägg
#6

Uhmmm...

Jag vet inte vad Swey svarade så jag tar mig friheten att säga typ:

För att initiera en array med okänt antal element vid kompilering så använder du en pekare...

Nu ska jag dricka öl..

Medlem sedan juni 20001 839 inlägg
#7

Det skulle inte ha fungerat för Chavez kod, så jag besparade alla den utläggningen...

Medlem sedan juni 200014 inlägg
#8

Det finns möjligheter att göra en dynamisk allokering av minnet till inläsning av sträng tex:

void main()
{
char *buffPtr;
GetString(buffPtr)
}

int GetString(char *buffPtr)
{
char *tmpPtr; int len=1;
buffPtr=malloc(1);
while(getch()!=13) {
len++;
tmpPtr=malloc(len);
memcpy(tmpPtr,buffPtr,len);
free(buffPtr)
buffPtr=tmpPtr;
}
return len;
}

Exemplet kan smidas till med realloc()...

Medlem sedan apr. 20003 971 inlägg
#9

Kom just på att det finns en maxlängd på kommandoraden och därför är det onödigt att köra med dynamisk minnestilldelning.

#define BUFFERSIZE 8192 // Max 8 kb
char buffer[BUFFERSIZE];

void main()
{
cin.getline( buffer, BUFFERSIZE );
}

Medlem sedan juni 20001 839 inlägg
#10

dBug:

Ganska omständigt...
Men det kanske inte gör så mycket... fast jag skulle nog välja att allokera en statisk buffert där... Dessutom brukar man veta hur mycket text man vill ha in...

Medlem sedan maj 20001 953 inlägg
#11

Jopp. Jag satte vektorn till 10000, det borde nog räcka

Kul med lite fart här. Trodde knappt att det fanns C++ programmerare på wF. En kul överraskning.

Medlem sedan apr. 20003 971 inlägg
#12

bughawk, brukar man veta hur mycket text man vill ha?

I alla fall inte jag. Om jag har en inmatning av något slag vet jag ju inte hur stor den ska vara. Det är ju användaren som säger hur lång den är.

- En som ogillar statiska buffertar

Medlem sedan juni 20001 839 inlägg
#13

Vad matar du in för data i dina program?

Själv brukar jag vilja ha en t ex. filnamn eller URI:er eller något annat som det finns en maxgräns på...

Medlem sedan apr. 20003 971 inlägg
#14

Vad är maxgränsen på URI?

Medlem sedan apr. 20002 487 inlägg
#15

Vet inte den officiellt gränsen, men på äldre versioner av Netscape var bufferten typ 8192 bokstäver, skrev man in mer så kunde man krascha Netscape

Muzzafarath

Medlem sedan juni 20001 839 inlägg
#16

Finns en konstant definierad... men jag kommer varken ihåg vad den heter eller vad den brukar vara tilldelad...

Medlem sedan juli 20005 inlägg
#17

Jag tycker det är bättre att skippa char* och använda string istället, den är dynamisk och dessutom lättare att använda. Dock går det inte att läsa in en rad (ett antal tecken + newline), om man försöker använda string läser man bara ett ord, från en istream. Då måste man använda getline() och den fungerar inte med string.

/Pelle

261 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)