Avatar billede mortenfn Nybegynder
13. november 2004 - 13:55 Der er 15 kommentarer og
1 løsning

Viser mystiske tegn

Jeg ved egentligt ikke om det er C++ der er problemet, men når jeg har compeilet noget c++ og det skal vises i CMD kommer der mærkelige tegn i stedet for æ ø å.

Hvad er der galt?

hilsen Morten

PS. man kan åbenbart ikke skrive æøå i titlen!!
Avatar billede kalp Novice
13. november 2004 - 13:56 #1
vel fordi det er danske tegn?
Avatar billede kalp Novice
13. november 2004 - 13:57 #2
det kan være du skal gemme titlen i en string og kalde den som titel
Avatar billede mortenfn Nybegynder
13. november 2004 - 13:58 #3
ja det er danske tegn, med de må da kunne vises!
Avatar billede kalp Novice
13. november 2004 - 14:01 #4
det kan det også godt i Java så burde det også her... kan du ikke gemme din titel i en String? og sætte din frames title til den string?
Avatar billede mortenfn Nybegynder
13. november 2004 - 14:03 #5
glem det med den titel - vet er her på exp.dk du ikke kan skrive æøå i titlen i et spr.
Avatar billede kalp Novice
13. november 2004 - 14:04 #6
ok
Avatar billede kalp Novice
13. november 2004 - 14:05 #7
hvis C++ bruger unicode så burde det jo virke
Avatar billede bertelbrander Novice
13. november 2004 - 15:02 #8
Et lille program der viser et par metoder til at omgå problemet:

#include <string.h>
#include <stdio.h>

#define ae "\x91"
#define oe "\x9b"
#define aa "\x86"
#define AE "\x92"
#define OE "\x9D"
#define AA "\x8F"

char *ToDos(char *src)
{
  static unsigned char dos_map[] = {0x91, 0x9B, 0x86, 0x92, 0x9D, 0x8F};
  static unsigned char win_map[] = {"æøåÆØÅ"};

  int i;
  for(i = 0; win_map[i]; i++)
  {
    char *s;
    while((s = strchr(src, win_map[i])) != 0)
      *s = dos_map[i];
  }
  return src;
}

int main()
{
  char Str1[] = "Dansk streng med æøå ÆØÅ";
  char Str2[] = "Anden streng med " ae " og " oe " samt " AA;
  ToDos(Str1);
  printf("%s\n", Str1);
  printf("%s\n", Str2);
  return 0;
}
Avatar billede bertelbrander Novice
13. november 2004 - 15:04 #9
I C++ kunne man lave ToDos som følger, den ændrer ikke på input, men laver et kopi:

std::string ToDos(const string &src)
{
  static unsigned char dos_map[] = {0x91, 0x9B, 0x86, 0x92, 0x9D, 0x8F};
  static unsigned char win_map[] = {"æøåÆØÅ"};
  string Dest = src;
  int i;
  for(i = 0; win_map[i]; i++)
  {
    string::size_type x;
    while((x = Dest.find(win_map[i])) != Dest.npos)
      Dest[x] = dos_map[i];
  }

  return Dest;
}
Avatar billede mortenfn Nybegynder
13. november 2004 - 15:35 #10
det ser fint ud , findes der en headerfil eller en færdig class der klarer trixet

Bertel du må lige svare!
Avatar billede mortenfn Nybegynder
13. november 2004 - 15:40 #11
den sidste er jeg ikke helt med på! dit første svar er ok
Avatar billede bertelbrander Novice
13. november 2004 - 16:31 #12
Den sidste bruger du med:

std::string OriginalStr = "Streng med æøå og ÆØÅ";
std::string OversatStr = ToDos(OriginalStr);

Eller:

std::cout << ToDos("Rødgrød med fløde") << std::endl;

Der findes, mig bekendt, ikke en færdig header eller class til formålet.

Jeg samler ikke på point, mine svar er gratis.
Avatar billede mortenfn Nybegynder
13. november 2004 - 16:33 #13
OK, men tak samler du på - så tak for hjælpen.
Avatar billede mortenfn Nybegynder
13. november 2004 - 16:43 #14
den sidste fatter jeg ikke
Avatar billede bertelbrander Novice
13. november 2004 - 23:01 #15
Den sidste:

std::cout << ToDos("Rødgrød med fløde") << std::endl;

Her sker der ca følgende:
1: char sekvensen "Rødgrød med fløde" (en string literal) bliver oversat til en std::string (det der bliver til src i ToDos).
2: Funktionen ToDos kaldes med denne std::string.
3: ToDos lave et kopi af denne std::string (Dest), og laver Windows-æøå om til DOS-åæø.
4: ToDos returnerer denne kopi
5: Kopien (med DOS-æøå) udskrives til std::cout (sammen med en std::endl).
Avatar billede mortenfn Nybegynder
14. november 2004 - 10:59 #16
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester