I'd use wide strings. C++ is unfortunately very unprepared for dealing with international data. Wide characters and strings work somewhat, but they're not ideal. Still, they're the best solution you'll get without involving 3rd party libraries or lots of specialized code.
Make sure that you know the encoding of your file, and that your compiler knows it, too.
Code:
#include <iostream>
#include <string>
using namespace std;
int main(void) {
wstring str = L"0123456789 abcdefghijklmnopqrstuvxyz åäö";
// You might want to call find() only once and cache the result. You also absolutely HAVE TO
// verify that you actually found something. That's most likely the source of your errors.
// Oh, and you ought to use proper values for the replacement.
str.replace(str.find(L"å"), str.find(L"å")+1, L"\x86");
str.replace(str.find(L"ä"), str.find(L"ä")+1, L"\x84");
str.replace(str.find(L"ö"), str.find(L"ö")+1, L"\x94");
str.replace(str.find(L"Å"), str.find(L"Å")+1, L"\x8F");
str.replace(str.find(L"Ä"), str.find(L"Ä")+1, L"\x8E");
str.replace(str.find(L"Ö"), str.find(L"Ö")+1, L"\x99");
for (int i=0;i<str.size();i++) {
wcout << str[i];
}
wcin.ignore(wcin.rdbuf()->in_avail()+1);
wcin.get();
return 0;
}