webForumDet fria alternativet

Hjälp!

7 svar · 391 visningar · startad av PatrikH

PatrikHMedlem sedan juli 200114 inlägg
#1

Sitter och skriver ett windowsprogram i Borland c++ Builder 5.

I en del av programmet så vill jag att texten i en "Memo-ruta" skall sökas igenom efter bokstaven 'A'. Om denna hittas så skall bokstaven 'b' placeras precis under denna (på raden under alltså). Har testat lite med String, men jag vet inte riktigt hur jag skall göra. Är ganska ny på windowsprogramering. Tacksam för svar!!

BeatboxMedlem sedan okt. 20013 217 inlägg
#2

Builder har en datatyp som heter AnsiString som används i alla komponenter där strängar hanteras. Sök i hjälpen efter denna datatyp.

// BeatBox

------------------
"Mörkrets gärningar, förekommer även på dagen"

Sixten Landby

PatrikHMedlem sedan juli 200114 inlägg
#3

Tack för det! Har dock fått ytterligare ett problem. När jag kör följande programsnutt så får jag ett felmeddelande, varför kan man inte göra så här och hur gör man?? (Är relativt ny på det här med AnsiString)

AnsiString kr, kt;
kr = Memo1->Text;

for(int i=1; i<Memo1->Text.Length()+1; i++)
{
if(kr == 'A')
kt = 'b';
else
kt = ' ';
}

Då kr = 'A' så kastas jag ut ur programmet och raden:

ThrowIfOutOfRange(idx); // Should Range-checking be optional to avoid overhead ??

markeras i filen "dstring.h" under "char& __fastcall operator [](const int idx)"

Jag fattar ingenting av det här, mycket tacksam för svar!!

PhOrPhErMedlem sedan feb. 20002 300 inlägg
#4

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
for(int i=1; i<Memo1->Text.Length()+1; i++)

Index börjar på 0 antar jag. Men det är inte det som är felet iofs. Felet är att du loopar "för länge"... Text.Length()+1 returnerar textens längd + 1.

Dvs. har du texten: "gurka" så är den texten 5 tecken lång. Första tecknet(g) ligger på index 0 och sista på 4. Text.Length()+1 på "gurka" skulle bli 6.

Och loopen ska loopa så länge som i är mindre än 6. Dvs. till 5. 5 är utanför index och därmed försöker du skriva "utanför" allokerat minne.

Typ. :e

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

PatrikHMedlem sedan juli 200114 inlägg
#5

Tack för svaret, men det konstiga med AnsiString är att index verkar börja på ett. Ändrade i for-satsen (som du skrev), men utan någon skillnad, har nu ändrat till "i<=Memo1->Text.Length()" vilket är samma sak som förrut, men kanske lite bättre kod bara.

Verkar som det är något annat som är fel...

PeWMedlem sedan juni 200010 432 inlägg
#6

Genom att:
ThrowIfOutOfRange(idx);
Har det ju som PhOrPhEr påtalade med index att göra.

En liten vild gissning kan ju vara att det inte är strängen kr det handlar om utan kt. Dvs att om du liksom med kr måste initiera även kt innan. Helt enkelt peta in lika många tecken i kt som du gjort med kr. Vilka tecken spelar ju ingen roll eftersom du ändå byter dem i loopen...

Typ:<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
kr = Memo1->Text;
kt = Memo1->Text;

------------------
Ancilla, face mea laganum!

[Redigerat av PeW den 06 jan 2002]

PatrikHMedlem sedan juli 200114 inlägg
#7

Man tackar, man tackar. Nu fungerar det perfekt!!

PeWMedlem sedan juni 200010 432 inlägg
#8

------------------
Ancilla, face mea laganum!

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