Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Revers på text fungerar ej..

Postades av 2003-06-04 10:12:27 - Jimmy Staff, i forum c++, Tråden har 11 Kommentarer och lästs av 843 personer

En kolega har problem med följande kod :
#include <iostream>
#include <cstring>
using namespace std;


void vand(char *cp)
{
char *tp = cp + strlen(cp) - 1;
char c;
for (; cp < tp; cp++, tp--)
{
c = *cp;
*cp = *tp;
*tp = c;
}
}



int main()
{
char *cpek = "hej";
vand(cpek);
for (int i = 0; i < strlen(cpek); i++)
cout << *(cpek + i) << endl;
return 0;
}



Får nå minnes fel.. koden ska kasta om bokstäverna så det ska bli "jeh"..


Svara

Sv: Revers på text fungerar ej..

Postades av 2003-06-04 10:23:50 - Niklas Jansson

Koden ser onekligen korrekt ut...
Försök med standardgrejerna; skriv ut vad *cp och *tp är vid varje tillfälle.

och
for (int i = 0; i < strlen(cpek); i++)
cout << *(cpek + i) << endl;

känns änna onödig, varför ska bokstäverna va på olika rader?
kan ersättars med

cout << cpek << endl;

f.ö. så är det ju bättre att använda string i det här fallet, eftersom ni uppenbarligen kör C++.


Svara

Sv: Revers på text fungerar ej..

Postades av 2003-06-04 10:55:22 - Jimmy Staff

tack för svaret.. ja vi får leta vidare...


Svara

Sv: Revers på text fungerar ej..

Postades av 2003-06-04 18:04:05 - Håkan Borneland

Hej!

Inte konstigt att ni får fel, här har ni lite hyss för er!!
<code>
*cp = *tp;
*tp = c;
</code>
Båda satserna försöker att göra samma sak, nämligen att tilldela ett värde (s.k. r-value) till ett värde.
Detta är blir fel då det ska vara ett adressvärde (s.k. l-value) till vänster om "=" tecknet i en tilldelning.
Det är därför som raden "c = *cp; " fungerar, då "c" representerar ett adressvärde.
* är i det här fallet en dereferens operator och returnerar ju värdet som cp och tp pekar på.
Programmet får sålunda ingen adress att lagra värdet på som du försöker att tilldela.

Till Niklas: Borde du inte ha sett detta ;-) ?
Hade du bråttom när du läste?

/Håkan


Svara

Sv: Revers på text fungerar ej..

Postades av 2003-06-04 20:19:45 - Niklas Jansson

Jo...usch... skäms lite nu...
Jag tänkte faktiskt tanken, men det blev väl typ "ja, ja, men nåt annat går väl inte att göra". Kollade mest på storleken.

Va ute igår, så jag e lite tom i bollen idag... =)

Nåväl; hur ska man nu göra... jag får inte riktigt ihop det i huvet, men det måste väl vara

cp = *tp;
tp = c;

isf?

Men det känns inte heller riktigt rätt.. .fan va det snurrar..

Jag håller ändå på idén om att köra med string. Argumenten mot att göra det är nästan obefintliga. Tar ytterst lite extra plats, är minnessäkra, är i regel snabbare än c-strängar.


Svara

Sv: Revers på text fungerar ej..

Postades av 2003-06-05 08:13:05 - Jarle Skogheim

Sen vill väl strlen ha en noll-terminerad sträng?


// Jarle


Svara

Sv: Revers på text fungerar ej..

Postades av 2003-06-05 09:37:10 - Niklas Jansson

Ja... men det är ju det... i anropet till "Vand" så är det naturligtvis en nollterminerad. Men returnerar strlen positionen efter '\0' eller positionen på '\0'?
Då får man ju i värsta fall köra med -2.


Och nu när jag tänker efter; ska det inte va *cp=*tp ändå?
om man skulle ändra cp med ett offset så skulle man ju inte kunna göra (cp+i)=*tp...

Nu har jag snurrat bort mig totalt... är så sällan jag använder c-strängar/vektorer. Som sagt; om ni kör C++, ska ni inte använda C-grejer.


Svara

Sv: Revers på text fungerar ej..

Postades av 2003-06-05 14:20:23 - Magnus Gudmundsson

hehehe,

nu kommer jag ihåg varför jag programmerar i vb ;-)

btw i string.h
finns ju en reversfunktion: strrev
om man ska envisas med använda char *
varför inte då köra med den?


Svara

Sv: Revers på text fungerar ej..

Postades av 2003-06-05 15:01:17 - Niklas Jansson

Ja... fast hellre <ctring> isf.
Men som sagt; det är helt vansinnigt att använda C-strängar när man programmerar C++.


Svara

Sv: Revers på text fungerar ej..

Postades av 2003-06-06 00:18:03 - Håkan Borneland

Hej igen!

Niklas: Hoppas att du fått ordning på "bollen", och att det slutat att snurra.

>>Och nu när jag tänker efter; ska det inte va *cp=*tp ändå?
>>om man skulle ändra cp med ett offset så skulle man ju inte kunna göra (cp+i)=*tp...

Nej du kan inte skriva "*cp = *tp", eller rättare sagt du kan det för kompilatorn kommer inte klaga!!
MEN vid körningen så....................BOOM!! (testa själv).
Pekare kan som sagt bara innehålla EN sak, en minnesadress.
Med offset (pekararitmetik) kan du som sagt alltid ändra på en pekare (farligt farligt),
men då vet du som sagt inte heller var i minner den pekar!!
(menar bara en pekare, inte ett strängfält eller vanligt fält (array)).
Enda tilldelningarna du "kan" göra är:
cp = tp //pekare till pekare, de får samma adress.
cp = &c //adress till pekare, cp får samma adress som c.
Vet inte om jag sparkar in öppna dörrar, ni vet väl det här redan??!!
Håller med om att string är smidigare och säkrare.
Till Jarle: Ja det vill den.
Till Magnus: Precis, varför uppfinna hjulet på nytt!

/Håkan








Svara

Sv: Revers på text fungerar ej..

Postades av 2003-06-06 09:00:35 - Niklas Jansson

Jo...nu när du säger det, så...nu tror jag att allt klarnade igen... =)
Jobbar för närvarande i VBA och har ganska nyss gått en kurs i Java, så det har minst sagt blivit att man har blandat ihop grejer...


Svara

Sv: Revers på text fungerar ej..

Postades av 2003-06-06 14:05:35 - Håkan Borneland

Det känner jag igen (att blanda i hop saker), när man hoppar från språk till språk.

/Håkan


Svara

Nyligen

  • 21:41 Automotive Services UK
  • 20:44 Erfarenhet av CBD-olja mot sömnpro
  • 12:13 Sex Dolls for Sale
  • 19:42 Online Casinos for Haitian Players
  • 19:38 Rekommendera något intressant
  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 880
27 965
271 776
623
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies