Kommt auf die verwendeten Zeichenkodierungen an. Angenommen, Du benutzt VS und schreibst in Deinen Quellcode ein "ä". Dann hat dieses ä den Wert 228, ist also in der verwendeten Zeichenkodierung (vermutlich ISO 8859-1) auf Position 228 zu finden.
Die Windows-Konsole verwendet aber einen anderen Zeichensatz ("Codepage 437"). Dort befindet sich das ä an Position 132. Deshalb erscheint bei einem cout << "ä"; kein ä.
Das ist also kein C++-Problem, sondern eins der verwendeten Umgebung. Aus diesem Grund verwenden alle aktuellen Frameworks und APIs Unicode, einen "erweiterten" Zeichensatz. Ein String in Java oder .NET ist ein Unicode-String und die meisten Win32-API-Calls gibt es in einer Unicode-Variante.
Du muß also Deine Strings vor der Ausgabe in die Windows-Konsole erstmal nach 437 konvertieren. Am einfachsten geht das mit der Standard-C-Funktion
Code:
setlocale(LC_ALL, ".ACP");
zu Programmanfang.