/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Problem med danske bogstaver
Fra : Claus


Dato : 29-03-01 16:22

Hej

Jeg er ved, at lave et C++-program, der skal indlæse en tekst fra en fil
og gengive den på skærmen, hvorefter brugeren skal gengive teksten, med et
bogstav af gangen fra en string. Men jeg kan ikke få programmet til at bruge
bogstaverne æøå.

Min kode ser indtil videre ud som følger.

/* Kode start */

#include <iostream.h>
#include <string.h>
#include <conio.h>

char *tekst = "Hej med dig - test af æøå";
void main()
{
int j = strlen(tekst);

for ( int k=0; k<j; k++ )
{
cout << tekst[k];
char input = getch();
if ( input == tekst[k] )
{
cout << "Hurra" << endl;
} else {
cout << "Buhh" << endl;
}
}
}

/* Kode slut */

Hvis jeg compiler koden i Borland C++ 5.0, virker programmet fint med
engelske tegn, men så snart jeg kommer til æøå har programmet en anden
opfattelse af tingene end jeg har.

Da jeg ikke er nogen c++ nørd, så vil jeg sætte pris hvis i kan hjælpe mig
og komme med et eksempel på hvordan det kan gøres.

Hilsen Claus Grøn
claus@e-privat.dk





 
 
Johannes (03-04-2001)
Kommentar
Fra : Johannes


Dato : 03-04-01 08:06

Det er fordi at de danske særtegn ikke er almindeligt kendt.
skriv istedet for:
\x9B =ø
\x8F = Ø
\x91 = æ
\x92 = Æ
\x86 = å
\x8F = Å

Dvs du skal skrive
> char *tekst = "Hej med dig - test af \x91\x9B\x86 ";
Venligst Johannes

"Claus" <claus@e-privat.dk> wrote in message
news:wAIw6.16$eu4.40471644@news.mobilixnet.dk...
> Hej
>
> Jeg er ved, at lave et C++-program, der skal indlæse en tekst fra en
fil
> og gengive den på skærmen, hvorefter brugeren skal gengive teksten, med et
> bogstav af gangen fra en string. Men jeg kan ikke få programmet til at
bruge
> bogstaverne æøå.
>
> Min kode ser indtil videre ud som følger.
>
> /* Kode start */
>
> #include <iostream.h>
> #include <string.h>
> #include <conio.h>
>
> char *tekst = "Hej med dig - test af æøå";
> void main()
> {
> int j = strlen(tekst);
>
> for ( int k=0; k<j; k++ )
> {
> cout << tekst[k];
> char input = getch();
> if ( input == tekst[k] )
> {
> cout << "Hurra" << endl;
> } else {
> cout << "Buhh" << endl;
> }
> }
> }
>
> /* Kode slut */
>
> Hvis jeg compiler koden i Borland C++ 5.0, virker programmet fint med
> engelske tegn, men så snart jeg kommer til æøå har programmet en anden
> opfattelse af tingene end jeg har.
>
> Da jeg ikke er nogen c++ nørd, så vil jeg sætte pris hvis i kan hjælpe mig
> og komme med et eksempel på hvordan det kan gøres.
>
> Hilsen Claus Grøn
> claus@e-privat.dk
>
>
>
>



Kent Friis (03-04-2001)
Kommentar
Fra : Kent Friis


Dato : 03-04-01 08:38

Den Tue, 3 Apr 2001 09:05:50 +0200 skrev Johannes:
>Det er fordi at de danske særtegn ikke er almindeligt kendt.
>skriv istedet for:
>\x9B =ø
>\x8F = Ø
>\x91 = æ
>\x92 = Æ
>\x86 = å
>\x8F = Å

Hvilket tegnsæt skulle det være? MS-DOS 865? EBCDIC?

I iso8859-1 (vesteuropa), er det

\xe6 = æ
\xf8 = ø
\xe5 = å
\xc6 = Æ
\xd8 = Ø
\xc5 = Å

Mvh
Kent
--
http://www.celebrityshine.com/~kfr - sidste billede: paris.png
Fedt - ferie helt til 1/5 :-þ

Johannes (03-04-2001)
Kommentar
Fra : Johannes


Dato : 03-04-01 09:37

"Kent Friis" <leeloo@mailandnews.com> wrote in message
news:9abulk$doq$1@sunsite.dk...
> Hvilket tegnsæt skulle det være? MS-DOS 865? EBCDIC?
> I iso8859-1 (vesteuropa), er det
> \xe6 = æ
> \xf8 = ø
> \xe5 = å
> \xc6 = Æ
> \xd8 = Ø
> \xc5 = Å

Jeg har tilføjet mine ASCII koder for æøå i et win32 projekt C++ 6.0 og
testet Claus´s kode.
Og det virker fint.
Det er DOS tegnsæt, og har virket fint for mig i alle de dos programmer jeg
har lavet under C++ med æøå, jeg har prøvet dine tegnsæt, men det bliver til
volapyk !!
H Johannes




Claus (04-04-2001)
Kommentar
Fra : Claus


Dato : 04-04-01 08:04

Hej igen!

Jeg tillader mig lige at bryde ind i jeres meget interessante diskussion.
Jeg har forsøgt mig med jeres forslag og de fungerer udmærket.
Jeg kan skrive æøå og computeren kan endda genkende dem igen Dog kun hvis de
er skrevet i DOS. Det vil sige at alle de filer jeg kan læse ind, og få
computeren til at genkende, skal være skrevet i DOS.
Jeg vil også meget gerne kunne indlæse tekstfiler skrevet i f.eks. Notepad.
Hvis det indebærer at jeg skal skifte tegnsæt vil jeg meget gerne vide
hvordan det foregår.

M.v.h. Claus claus@e-privat.dk

PS.: Tak for svarene!



Claus Brinch Jensen (04-04-2001)
Kommentar
Fra : Claus Brinch Jensen


Dato : 04-04-01 00:14

Da jeg forleden lavede et detaljeret svar til en anden, som spurgte om noget
lignende, får du lige en kopi
af det relevante i dette svar. Det burde kunne løse dit problem.

Da du snakker om Borland C++ 5.0 formoder jeg det er Windows du arbejder på.

Claus


---cut---
For at det ikke skulle være kompliceret nok at holde styr på forskellige
tegnsæt, så er tegnsættene i Windows forskellige i GUI programmer og console
programmer. GUI programmerne bruger ANSI tegnsæt og console programmerne
bruger OEM tegnsæt. Du har muligvis prøvet at åbne en tekstfil, som
indeholder grafiske tegn eller æ, ø eller ø, i både en console editor
(f.eks. edit.exe) og en GUI editor (f.eks. notepad) og derved bemærket at
tegnene er fuldstændig fucked up i den ene editor. Det er netop p.g.a. at
Windows som sagt arbejder med forskellige tegnsæt i GUI og console apps.
Hvorfor i alverden Windows gør dette ved jeg ikke med sikkerhed, men et
kvalificeret gæt vil være p.g.a. bagud kompatibilitet med gamle DOS
programmer.

Der findes to funktioner i Windows der kan konvertere frem og tilbage mellem
de to tegnsæt, CharToOem() og OemToChar(), som konverterer hhv. fra ANSI
(GUI) til OEM (console) og tilbage igen. Så hvis du har skrevet for eksempel
en lille tekstfil indeholdende æ, ø, og å'er i en console tekst editor og
f.eks. gerne vil vise den i en GUI app (f.eks. i en Message Box), så er du
nødt til at konvertere teksten med OemToChar() for at få æ, ø, og å vist
korrekt. Det samme gælder naturligvis den anden vej.

....

Grunden til at dine Æ'er ikke vises korrekt i nedenstående program er at når
du laver koden, så indtaster du den i et GUI program og dermed i ANSI
karaktersættet. Nå programmet kører så vises dit ANSI 'Æ' i OEM
karaktersættet, hvor der i stedet befinder sig et grafisk tegn på denne
position. Derfor er du nødt til at konvertere strengene til OEM
karaktersættet før du skriver dem ud i console vinduet, dvs. du skal køre
dine output strenge igennem CharToOem() funktionen først.

Hvis du indsætter nedenstående kode i toppen af din funktion og ændrer
nedenstående to linjer
> cout<< "2. AENDRING AF PASSWORD"<< endl;
> case '2' : cout << "\nAENDRING" << endl;

til følgende:

cout<< convert("2. ÆNDRING AF PASSWORD") << endl;
case '2' : cout << convert("\nÆNDRING") << endl;

Så vil du kunne se dine Æ'er i console vinduet.

Du kan evt. alternativt prøve at bruge en console editor (edit) til at
indtaste dine Æ'er i sourcen. Så vil du se at de er ændret andre tegn når du
kigger på dem i Visual C++ editoren, men de vil blive udskrevet korrekt i
console vinduet når du kører programmet.

---
#include <string.h> // needed for strlen() function
#include <windows.h> // needed for CharToOem() function

char const * convert(char const * ANSIstreng)
{
const unsigned long MAX_BUFFER = 500;
static char OEMstreng[MAX_BUFFER];

char const * result = ANSIstreng;
// Make sure the buffer is large enough.
if(strlen(ANSIstreng) + 1 <= MAX_BUFFER) {
if(CharToOem(ANSIstreng, OEMstreng)) {
result = OEMstreng;
}
}
return result;
}
---


Mvh.
Claus
---cut---



"Claus" <claus@e-privat.dk> wrote in message
news:wAIw6.16$eu4.40471644@news.mobilixnet.dk...
> Hej
>
> Jeg er ved, at lave et C++-program, der skal indlæse en tekst fra en
fil
> og gengive den på skærmen, hvorefter brugeren skal gengive teksten, med et
> bogstav af gangen fra en string. Men jeg kan ikke få programmet til at
bruge
> bogstaverne æøå.
>
> Min kode ser indtil videre ud som følger.
>
> /* Kode start */
>
> #include <iostream.h>
> #include <string.h>
> #include <conio.h>
>
> char *tekst = "Hej med dig - test af æøå";
> void main()
> {
> int j = strlen(tekst);
>
> for ( int k=0; k<j; k++ )
> {
> cout << tekst[k];
> char input = getch();
> if ( input == tekst[k] )
> {
> cout << "Hurra" << endl;
> } else {
> cout << "Buhh" << endl;
> }
> }
> }
>
> /* Kode slut */
>
> Hvis jeg compiler koden i Borland C++ 5.0, virker programmet fint med
> engelske tegn, men så snart jeg kommer til æøå har programmet en anden
> opfattelse af tingene end jeg har.
>
> Da jeg ikke er nogen c++ nørd, så vil jeg sætte pris hvis i kan hjælpe mig
> og komme med et eksempel på hvordan det kan gøres.
>
> Hilsen Claus Grøn
> claus@e-privat.dk
>
>
>
>



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste