#include <iostream>
#include <string>
#include <sstream>
using namespace std;
string encrypt(const string &s) {
setlocale(LC_ALL, "Russian");
ostringstream result;
for (string::size_type i = 0; i < s.size(); i++) {\
switch (s[i]) {
case 'А':
result << "•−" << " ";
break;
default:
cout << "Неизвестный символ в строке! Работа программы прервана" << endl;
return 0;
}
}
return result.str();
}
// string decrypt() {}
int main() {
setlocale(LC_ALL, "ru_RU.utf8");
string s;
cin >> s;
cout << encrypt(s);
}
Неизвестный символ в строке! Работа программы прервана
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string: construction from null is not valid
Character too large for enclosing character literal type
Дык русские символы в UTF-8 занимают 2 байта, а char вмещает только 1 байт.
case 'А':
string s;
cin >> s;
string s = "А";
setlocale(LC_ALL, "Russian");
.........
setlocale(LC_ALL, "ru_RU.utf8");
case u'\u0410':
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
string encrypt(const string &s) {
ostringstream result;
for (string::size_type i = 0; i < s.size(); i++) {
switch (s[i]) {
case 'А':
result << "•−" << " ";
break;
case 'Б':
result << "−•••" << " ";
default:
cout << "Неизвестный символ в строке! Работа программы прервана" << endl;
return 0;
}
}
return result.str();
}
// string decrypt() {}
int main() {
string s = 'А';
cout << s;
cout << encrypt(s);
}
Давай. Докажи что твой Морзе в принципе работает не для русских букв а для любых международных символов.
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
string encrypt(const string &s) {
ostringstream result;
for (string::size_type i = 0; i < s.size(); i++) {
switch (s[i]) {
case 'А':
result << "•−" << " ";
break;
case 'Б':
result << "-" << " ";
default:
cout << "Неизвестный символ в строке! Работа программы прервана" << endl;
return 0;
}
}
return result.str();
}
// string decrypt() {}
int main() {
string s = 'А';
cout << encrypt(s);
}
</>
wstring A = "A"
.......
case A:
.........
/home/nikita/CLionProjects/AzbukaMorze/main.cpp:11:18: warning: multi-character character constant [-Wmultichar]
11 | case 'А':
| ^~~
/home/nikita/CLionProjects/AzbukaMorze/main.cpp: In function ‘std::string encrypt(const std::wstring&)’:
/home/nikita/CLionProjects/AzbukaMorze/main.cpp:22:22: error: could not convert ‘std::__cxx11::basic_stringstream<_CharT, _Traits, _Alloc>::str() const [with _CharT = wchar_t; _Traits = std::char_traits<wchar_t>; _Alloc = std::allocator<wchar_t>; __string_type = std::__cxx11::basic_string<wchar_t>]()’ from ‘basic_string<wchar_t>’ to ‘basic_string<char>’
22 | return result.str();
| ~~~~~~~~~~^~
| |
| basic_string<wchar_t>
/home/nikita/CLionProjects/AzbukaMorze/main.cpp: In function ‘int main()’:
/home/nikita/CLionProjects/AzbukaMorze/main.cpp:30:10: error: expected ‘;’ before ‘encrypt’
30 | wcout encrypt(s);
| ^~~~~~~~
| ;
ninja: build stopped: subcommand failed.
<<
? #include <iostream>
#include <string>
#include <sstream>
using namespace std;
wstring encrypt(const wstring &s) {
wstringstream result;
for (wstring::size_type i = 0; i < s.size(); i++) {
switch (s[i]) {
case L'А':
result << "•−" << " ";
break;
case L'Б':
result << "-" << " ";
break;
default:
cout << "Неизвестный символ в строке! Работа программы прервана" << endl;
return 0;
}
}
return result.str();
}
// string decrypt() {}
int main() {
wstring s;
wcin >> s;
wcout << encrypt(s);
}
/usr/bin/c++ -g -MD -MT CMakeFiles/AzbukaMorze.dir/main.cpp.o -MF CMakeFiles/AzbukaMorze.dir/main.cpp.o.d -o CMakeFiles/AzbukaMorze.dir/main.cpp.o -c /home/nikita/CLionProjects/AzbukaMorze/main.cpp
/home/nikita/CLionProjects/AzbukaMorze/main.cpp:20:24: warning: character constant too long for its type
20 | return L'Неизвестный символ в строке! Работа программы прервана';
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/nikita/CLionProjects/AzbukaMorze/main.cpp: In function ‘std::wstring encrypt(const std::wstring&)’:
/home/nikita/CLionProjects/AzbukaMorze/main.cpp:20:24: error: could not convert ‘1072’ from ‘wchar_t’ to ‘std::wstring’ {aka ‘std::__cxx11::basic_string<wchar_t>’}
20 | return L'Неизвестный символ в строке! Работа программы прервана';
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| wchar_t
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
wstring encrypt(const wstring &s) {
wstringstream result;
setlocale(LC_ALL, "ru");
for (wstring::size_type i = 0; i < s.size(); i++) {
switch (s[i]) {
case L'А':
result << L"•−" << L' ';
break;
case L'Б':
result << L'-' << L' ';
break;
default:
return L"Ошибка! Символ не найден в базе";
}
}
return result.str();
}
// string decrypt() {}
int main() {
setlocale(LC_ALL, "ru");
wstring s;
wcin >> s;
wcout << encrypt(s);
}
return L"Ошибка! Символ не найден в базе";
L'А'