webForumDet fria alternativet

Mitt första lilla program.

16 svar · 622 visningar · startad av Chavez

ChavezMedlem sedan maj 20001 953 inlägg
#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!

------------------
<A HREF="mailto:djungelfredde@spray.se">Mvh Chavez
</A> UIN: 73975020
Skyll inte på mig, jag hade inte rösträtt.

[Redigerat av Chavez den 08 jul 2000]

[Redigerat av Chavez den 08 jul 2000]

ChavezMedlem 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

------------------
<A HREF="mailto:djungelfredde@spray.se">Mvh Chavez
</A> UIN: 73975020
Skyll inte på mig, jag hade inte rösträtt.

[Redigerat av Chavez den 08 jul 2000]

[Redigerat av Chavez den 08 jul 2000]

bughawkMedlem 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...

------------------
Mvh
Yrin Eldfjell

[Redigerat av bughawk den 08 jul 2000]

SweyMedlem 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.

------------------
/mvh Swey
Programmera PHP

ChavezMedlem 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

------------------
<A HREF="mailto:djungelfredde@spray.se">Mvh Chavez
</A> UIN: 73975020
Skyll inte på mig, jag hade inte rösträtt.

PhOrPhErMedlem 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..

------------------
- Erik Hellström -
http://3d.burken.nu

bughawkMedlem sedan juni 20001 839 inlägg
#7

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

------------------
Mvh
Yrin Eldfjell

dBugMedlem 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()...

SweyMedlem 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 );
}

------------------
/mvh Swey
Programmera PHP

bughawkMedlem 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...

------------------
Mvh
Yrin Eldfjell

ChavezMedlem 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.

------------------
<A HREF="mailto:djungelfredde@spray.se">Mvh Chavez
</A> UIN: 73975020
Skyll inte på mig, jag hade inte rösträtt.

SweyMedlem 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

------------------
/mvh Swey
Programmera PHP

bughawkMedlem 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å...

------------------
Mvh
Yrin Eldfjell

SweyMedlem sedan apr. 20003 971 inlägg
#14

Vad är maxgränsen på URI?

------------------
/mvh Swey
Programmera PHP

MuzzafarathMedlem 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

bughawkMedlem 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...

------------------
Mvh
Yrin Eldfjell

-pelle-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

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