Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
7 / 8 / 3
Регистрация: 02.04.2018
Сообщений: 531

Поиск русского символа в строке

30.05.2024, 18:10. Показов 1034. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Может тема избитая, где-то отдалённо понимаю это, что русский символ два байта занимает, но не могу понять, как сделать поиск русского символа в строке. У меня есть массив с символами, и мне нужно вернуть номер ячейки массива, для каждого символа. И что-то как-то забуксовал на этом.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
using namespace std;
 
string CHAR_to_UCS2(string ref) {
    
    const char *std_symb[196]       {" ","!","\"","#","$","%","&","'",
                                     "(",")","*","+",",","-",".","/",
                                     "0","1","2","3","4","5","6","7",
                                     "8","9",":",";","<","=",">","?",
                                     "@","A","B","C","D","E","F","G",
                                     "H","I","J","K","L","M","N","O",
                                     "P","Q","R","S","T","U","V","W",
                                     "X","Y","Z","["," ","]","^","_",
                                     "`","a","b","c","d","e","f","g",
                                     "h","i","j","k","l","m","n","o",
                                     "p","q","r","s","t","u","v","w",
                                     "x","y","z","{","|","}","~"," ",
                                     " ","Ё","Ђ","Ѓ","Є","Ѕ","І","Ї",
                                     "Ј","Љ","Њ","Ћ","Ќ"," ","Ў","Џ",
                                     "А","Б","В","Г","Д","Е","Ж","З",
                                     "И","Й","К","Л","М","Н","О","П",
                                     "Р","С","Т","У","Ф","Х","Ц","Ч",
                                     "Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я",
                                     "а","б","в","г","д","е","ж","з",
                                     "и","й","к","л","м","н","о","п",
                                     "р","с","т","у","ф","х","ц","ч",
                                     "ш","щ","ъ","ы","ь","э","ю","я",
                                     " ","ё","ђ","ѓ","є","ѕ","і","ї",
                                     "ј","љ","њ","ћ","ќ"," ","ў","џ",
                                     " ","§"," ","№"};
    
 
 
    for(int x = 0; x < ref.length(); x++){
       //cout << ref.substr(x, 1) << endl;
       for(int y = 0; y < 196; y++){
          if(ref[x] == std_symb[y]) cout << y << endl;
       }
    }
    
    
    return ref;
    
}
 
int main()
{
    setlocale(LC_ALL,"Russian");
    
    std::cout<<CHAR_to_UCS2("Hello world! Привет мир!");
 
    return 0;
}
я тут по сути сравниваю 1 байт со Строкой, что делать нельзя. А русский символ занимает два байта. Поэтому я не знаю как быть, как вытащить русский символ. Ибо при переборе байт по длине строки, английский символ возвращается как 1 байт, а русский как 1 половина русского потом вторая половина русского.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.05.2024, 18:10
Ответы с готовыми решениями:

Поиск символа в строке
Здравствуйте, вообщем нужно, чтобы в случае, если символа из сообщения нет в массиве алфавита, то должно появиться сообщение об ошибке. Но...

Поиск символа в строке
Здравствуйте! у меня такой вопрос, надо найти символ в строке, а именно символ '&lt;' и '&gt;' между этими символами может быть что...

Вводится произвольная строка русского текста, а также одна из букв русского алфавита. Удвоить эту букву в строке
Вводится произвольная строка русского текста, а также одна из букв русского алфавита. Удвоить эту букву в строке.

19
 Аватар для Наталья8
621 / 379 / 67
Регистрация: 09.03.2016
Сообщений: 4,074
30.05.2024, 18:20
Хорош гивном бросаться...
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
30.05.2024, 18:31
SergeyKagen, Есть такое слово, iconv. Там уже все за вас нашли.
0
 Аватар для sporta1982
213 / 59 / 7
Регистрация: 05.10.2023
Сообщений: 507
30.05.2024, 18:36
Ну и где же ваши 2 байта?
Миниатюры
Поиск русского символа в строке  
0
 Аватар для Наталья8
621 / 379 / 67
Регистрация: 09.03.2016
Сообщений: 4,074
30.05.2024, 18:50
0
 Аватар для Наталья8
621 / 379 / 67
Регистрация: 09.03.2016
Сообщений: 4,074
30.05.2024, 19:18
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <string>
 
int main()
{
    setlocale(LC_ALL, "Russian");
    char ghj[] = "Hello world! Привет мир!";
    for (short i = 0; i < strlen(ghj); ++i)
    printf("%c --- %d\n", ghj[i], (unsigned char)ghj[i]);
    
    getchar();
    return 0;
}

Вот я тебе вывел.
И что?
0
 Аватар для sporta1982
213 / 59 / 7
Регистрация: 05.10.2023
Сообщений: 507
30.05.2024, 20:01
Во первых это не компилируется, ну вы можете символ в буфер записать.
Но для сравнения строк нужна функция.
0
7 / 8 / 3
Регистрация: 02.04.2018
Сообщений: 531
30.05.2024, 20:34  [ТС]
мне номер не из таблицы ASCII нужно вывести, а номер из массива const char *std_symb[196] - там 196 ячеек.
0
 Аватар для sporta1982
213 / 59 / 7
Регистрация: 05.10.2023
Сообщений: 507
30.05.2024, 22:11
C++
1
2
3
4
5
char buffer[100];
buffer[0]=ref[x];
buffer[1]=0;
 
if(strcmp(buffer,std_symb[y]==0) cout <<y<<endl;
Что вам это все даст? Либо я физического смысла не понимаю.

C++
1
//if(ref[x] == std_symb[y]) cout << y << endl; //
Вам намекают , что надо посмотреть на память на которую указывает каждый из указателей из массива указателей.
И посмотреть как там представлены русские буквы. Выше же был скриншот, русские буквы представлены одним байтом.

Добавлено через 3 минуты
с эти кодом просто будет отображаться индекс из вашего массива с указателями.

Добавлено через 1 минуту
А ну если это нужно , тогда так должно работать.
0
 Аватар для Наталья8
621 / 379 / 67
Регистрация: 09.03.2016
Сообщений: 4,074
30.05.2024, 22:47
Вот так вас уважаемый, удовлетворит?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <string>
 
short fnd(char *cmbol) {
    const char *std_symb[]{
    " ","!","\"","#","$","%","&","'",
    "(",")","*","+",",","-",".","/",
    "0","1","2","3","4","5","6","7",
    "8","9",":",";","<","=",">","?",
    "@","A","B","C","D","E","F","G",
    "H","I","J","K","L","M","N","O",
    "P","Q","R","S","T","U","V","W",
    "X","Y","Z","["," ","]","^","_",
    "`","a","b","c","d","e","f","g",
    "h","i","j","k","l","m","n","o",
    "p","q","r","s","t","u","v","w",
    "x","y","z","{","|","}","~"," ",
    " ","Ё","Ђ","Ѓ","Є","Ѕ","І","Ї",
    "Ј","Љ","Њ","Ћ","Ќ"," ","Ў","Џ",
    "А","Б","В","Г","Д","Е","Ж","З",
    "И","Й","К","Л","М","Н","О","П",
    "Р","С","Т","У","Ф","Х","Ц","Ч",
    "Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я",
    "а","б","в","г","д","е","ж","з",
    "и","й","к","л","м","н","о","п",
    "р","с","т","у","ф","х","ц","ч",
    "ш","щ","ъ","ы","ь","э","ю","я",
    " ","ё","ђ","ѓ","є","ѕ","і","ї",
    "ј","љ","њ","ћ","ќ"," ","ў","џ",
    " ","§"," ","№" };
    short y = 0;
    for (; y < 196; ++y) {
if (strncmp(cmbol, std_symb[y], 1)==0)break;
    }
    return y;
}
 
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
char ms[] = "Hello world! Привет мир!";
for (short i = 0; i < strlen(ms); ++i)
    std::printf("%c  ---  %d\n", ms[i], fnd( &ms[i]));
    
getchar();
    return 0;
0
7 / 8 / 3
Регистрация: 02.04.2018
Сообщений: 531
31.05.2024, 09:25  [ТС]
конечно нет, ибо у меня "Hello world! Привет мир!" это строка, а не массив char

теперь пытаюсь перевести строку в char таким способом
C++
1
const char *ref_char = ref.c_str();
но почему-то

C++
1
strncmp(ref_char[ln], std_symb[fnd], 1)
ругается на ref_char

error: invalid conversion from ‘char’ to ‘const char*’ [-fpermissive]

моя не понимать.
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
31.05.2024, 09:36
Цитата Сообщение от SergeyKagen Посмотреть сообщение
error: invalid conversion from ‘char’ to ‘const char*’ [-fpermissive]
моя не понимать.
что именно не понимать? что вы в strncmp вместо const char * (указатель на символы) передаете ОДИН символ (ref_char[ln])? Тогда передавайте &ref_char[ln]
P.S. А чем вас все-таки iconv-то не устраивает, что вы начали закатывать Солнце вручную?
0
7 / 8 / 3
Регистрация: 02.04.2018
Сообщений: 531
31.05.2024, 10:02  [ТС]
Цитата Сообщение от Azathtot Посмотреть сообщение
P.S. А чем вас все-таки iconv-то не устраивает, что вы начали закатывать Солнце вручную?
причина простая, я просто пока что ещё не понимаю этого.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <cstring>
#include <string.h>
using namespace std;
 
string CHAR_to_UCS2(string ref) {
    
    string res = "";
    
    const char *ref_char = ref.c_str();
    
    const char *std_symb[196]       {" ","!","\"","#","$","%","&","'",
                                     "(",")","*","+",",","-",".","/",
                                     "0","1","2","3","4","5","6","7",
                                     "8","9",":",";","<","=",">","?",
                                     "@","A","B","C","D","E","F","G",
                                     "H","I","J","K","L","M","N","O",
                                     "P","Q","R","S","T","U","V","W",
                                     "X","Y","Z","["," ","]","^","_",
                                     "`","a","b","c","d","e","f","g",
                                     "h","i","j","k","l","m","n","o",
                                     "p","q","r","s","t","u","v","w",
                                     "x","y","z","{","|","}","~"," ",
                                     " ","Ё","Ђ","Ѓ","Є","Ѕ","І","Ї",
                                     "Ј","Љ","Њ","Ћ","Ќ"," ","Ў","Џ",
                                     "А","Б","В","Г","Д","Е","Ж","З",
                                     "И","Й","К","Л","М","Н","О","П",
                                     "Р","С","Т","У","Ф","Х","Ц","Ч",
                                     "Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я",
                                     "а","б","в","г","д","е","ж","з",
                                     "и","й","к","л","м","н","о","п",
                                     "р","с","т","у","ф","х","ц","ч",
                                     "ш","щ","ъ","ы","ь","э","ю","я",
                                     " ","ё","ђ","ѓ","є","ѕ","і","ї",
                                     "ј","љ","њ","ћ","ќ"," ","ў","џ",
                                     " ","§"," ","№"};
 
    for(int ln = 0; ln < strlen(ref_char); ln++){
        for(int fnd = 0; fnd < 196; fnd++){
            if (strncmp(&ref_char[ln], std_symb[fnd], 1)==0) { cout << fnd << " " << std_symb[fnd] << endl; fnd = 196; }
        }
    }
    
    return res;
    
}
 
int main()
{
    string str = "Hello world! Привет мир!";
    std::cout<<CHAR_to_UCS2(str);
 
    return 0;
}
С английскими символами это работает, но что касается русских он берёт только один байт и из массива тоже берёт один байт и спотыкается на этом, а если в strncmp указать 2 вместо 1, то тогда не будут работать английские символы.
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
31.05.2024, 10:14
Цитата Сообщение от SergeyKagen Посмотреть сообщение
причина простая, я просто пока что ещё не понимаю этого.
Так документацию зачем придумали??? Я даже ссылку давал.
Что бы определить сколько байт есть очень простой механизм. Если у вас UTF8 то
- если первый символ меньше 7F то длина 1
- если первый символ больше 7F и меньше DF то длина 2
- если первый символ больше DF и меньше EF то длина 3
иначе - 4 байта
1
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,929
31.05.2024, 10:20
Цитата Сообщение от Наталья8 Посмотреть сообщение
Вот я тебе вывел.
Ваш код не компилируется. Я попробовал его исправить:
C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <string.h>
#include <locale.h>
 
int main(){
    setlocale(LC_ALL, "ru_RU.utf-8");
    char ghj[] = "Hello world! Привет мир!";
    for (short i = 0; i < strlen(ghj); ++i)
    printf("%c --- %d\n", ghj[i], (unsigned char)ghj[i]);
}
Теперь компилируется, но закономерно выдает чушь:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
$ gcc main.c -Wall -Wextra -Wpedantic
main.c: In function ‘main’:
main.c:8:25: warning: comparison of integer expressions of different signedness: ‘short int’ and ‘size_t’ {aka ‘long unsigned int’} [-Wsign-compare]
    8 |     for (short i = 0; i < strlen(ghj); ++i)
      |                         ^
$ ./a.out 
H --- 72
e --- 101
l --- 108
l --- 108
o --- 111
  --- 32
w --- 119
o --- 111
r --- 114
l --- 108
d --- 100
! --- 33
  --- 32
� --- 208
� --- 159
� --- 209
� --- 128
� --- 208
� --- 184
� --- 208
� --- 178
� --- 208
� --- 181
� --- 209
� --- 130
  --- 32
� --- 208
� --- 188
� --- 208
� --- 184
� --- 209
� --- 128
! --- 33
Потому что символы кириллицы занимают не один, а два char-а.
Если уж хочется работать с символами, как с отдельными сущностями, для этого придумали wchar_t:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <wchar.h>
#include <inttypes.h>
 
int main(){
  setlocale(LC_ALL, "ru_RU.utf-8");
  wchar_t str[] = L"Hello world! Привет мир!";
  size_t len = wcslen(str);
  for(size_t i = 0; i < len; i++){
    printf("%lc --- %"PRIu32"\n", str[i], (uint32_t)str[i]);
  }
}
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ gcc main.c -Wall -Wextra -Wpedantic
$ ./a.out 
H --- 72
e --- 101
l --- 108
l --- 108
o --- 111
  --- 32
w --- 119
o --- 111
r --- 114
l --- 108
d --- 100
! --- 33
  --- 32
П --- 1055
р --- 1088
и --- 1080
в --- 1074
е --- 1077
т --- 1090
  --- 32
м --- 1084
и --- 1080
р --- 1088
! --- 33
SergeyKagen, к вам это тоже относится:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <wchar.h>
#include <inttypes.h>
 
const wchar_t unknown_table[] = {L' ',L'!',L'\'',L'#',L'$',L'%',L'&',L'\'',
                                 L'(',L')',L'*', L'+',L',',L'-',L'.',L'/',
                                 L'0',L'1',L'2', L'3',L'4',L'5',L'6',L'7',
                                 L'8',L'9',L':', L';',L'<',L'=',L'>',L'?',
                                 L'@',L'A',L'B', L'C',L'D',L'E',L'F',L'G',
                                 L'H',L'I',L'J', L'K',L'L',L'M',L'N',L'O',
                                 L'P',L'Q',L'R', L'S',L'T',L'U',L'V',L'W',
                                 L'X',L'Y',L'Z', L'[',L' ',L']',L'^',L'_',
                                 L'`',L'a',L'b', L'c',L'd',L'e',L'f',L'g',
                                 L'h',L'i',L'j', L'k',L'l',L'm',L'n',L'o',
                                 L'p',L'q',L'r', L's',L't',L'u',L'v',L'w',
                                 L'x',L'y',L'z', L'{',L'|',L'}',L'~',L' ',
                                 L' ',L'Ё',L'Ђ', L'Ѓ',L'Є',L'Ѕ',L'І',L'Ї',
                                 L'Ј',L'Љ',L'Њ', L'Ћ',L'Ќ',L' ',L'Ў',L'Џ',
                                 L'А',L'Б',L'В', L'Г',L'Д',L'Е',L'Ж',L'З',
                                 L'И',L'Й',L'К', L'Л',L'М',L'Н',L'О',L'П',
                                 L'Р',L'С',L'Т', L'У',L'Ф',L'Х',L'Ц',L'Ч',
                                 L'Ш',L'Щ',L'Ъ', L'Ы',L'Ь',L'Э',L'Ю',L'Я',
                                 L'а',L'б',L'в', L'г',L'д',L'е',L'ж',L'з',
                                 L'и',L'й',L'к', L'л',L'м',L'н',L'о',L'п',
                                 L'р',L'с',L'т', L'у',L'ф',L'х',L'ц',L'ч',
                                 L'ш',L'щ',L'ъ', L'ы',L'ь',L'э',L'ю',L'я',
                                 L' ',L'ё',L'ђ', L'ѓ',L'є',L'ѕ',L'і',L'ї',
                                 L'ј',L'љ',L'њ', L'ћ',L'ќ',L' ',L'ў',L'џ',
                                 L' ',L'§',L' ', L'№'};
 
int main(){
  setlocale(LC_ALL, "ru_RU.utf-8");
  wchar_t str[] = L"Hello world! Привет мир!";
  size_t len = wcslen(str);
  for(size_t i = 0; i < len; i++){
    for(size_t j=0; j<sizeof(unknown_table); j++){
      if(str[i] == unknown_table[j])printf("[%lc](0x%X) = table[%i]\n", str[i], (uint32_t)str[i], j);
    }
  }
  printf("\n");
}
Кстати, зачем вам в вашей таблице столько пробелов?
0
7 / 8 / 3
Регистрация: 02.04.2018
Сообщений: 531
31.05.2024, 10:46  [ТС]
Вот теперь стало ясно))) Спасибо.

Вот такой костыль, да мне и не нужно всякого рода в коде показывать сложности. Главное чтобы тут работало.
Может кому пригодится эта функция для превращения строки в UCS2 кодировку.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream>
#include <cstring>
#include <string.h>
using namespace std;
 
string CHAR_to_UCS2(string ref) {
    
    string res = "";
    //const char *C = R.c_str();
    const char *ref_char = ref.c_str();
    
    const char *std_symb[196]       {" ","!","\"","#","$","%","&","'",
                                     "(",")","*","+",",","-",".","/",
                                     "0","1","2","3","4","5","6","7",
                                     "8","9",":",";","<","=",">","?",
                                     "@","A","B","C","D","E","F","G",
                                     "H","I","J","K","L","M","N","O",
                                     "P","Q","R","S","T","U","V","W",
                                     "X","Y","Z","["," ","]","^","_",
                                     "`","a","b","c","d","e","f","g",
                                     "h","i","j","k","l","m","n","o",
                                     "p","q","r","s","t","u","v","w",
                                     "x","y","z","{","|","}","~"," ",
                                     " ","Ё","Ђ","Ѓ","Є","Ѕ","І","Ї",
                                     "Ј","Љ","Њ","Ћ","Ќ"," ","Ў","Џ",
                                     "А","Б","В","Г","Д","Е","Ж","З",
                                     "И","Й","К","Л","М","Н","О","П",
                                     "Р","С","Т","У","Ф","Х","Ц","Ч",
                                     "Ш","Щ","Ъ","Ы","Ь","Э","Ю","Я",
                                     "а","б","в","г","д","е","ж","з",
                                     "и","й","к","л","м","н","о","п",
                                     "р","с","т","у","ф","х","ц","ч",
                                     "ш","щ","ъ","ы","ь","э","ю","я",
                                     " ","ё","ђ","ѓ","є","ѕ","і","ї",
                                     "ј","љ","њ","ћ","ќ"," ","ў","џ",
                                     " ","§"," ","№"};
    
    const char *ucs2_symb[196] {"0020","0021","0022","0023","0024","0025","0026","0027","0028","0029","002A","002B","002C","002D","002E","002F",
                                "0030","0031","0032","0033","0034","0035","0036","0037","0038","0039","003A","003B","003C","003D","003E","003F",
                                "0040","0041","0042","0043","0044","0045","0046","0047","0048","0049","004A","004B","004C","004D","004E","004F",
                                "0050","0051","0052","0053","0054","0055","0056","0057","0058","0059","005A","005B","005C","005D","005E","005F",
                                "0060","0061","0062","0063","0064","0065","0066","0067","0068","0069","006A","006B","006C","006D","006E","006F",
                                "0070","0071","0072","0073","0074","0075","0076","0077","0078","0079","007A","007B","007C","007D","007E","0020",
                                "0020","0401","0402","0403","0404","0405","0406","0407","0408","0409","040A","040B","040C","040D","040E","040F",
                                "0410","0411","0412","0413","0414","0415","0416","0417","0418","0419","041A","041B","041C","041D","041E","041F",
                                "0420","0421","0422","0423","0424","0425","0426","0427","0428","0429","042A","042B","042C","042D","042E","042F",
                                "0430","0431","0432","0433","0434","0435","0436","0437","0438","0439","043A","043B","043C","043D","043E","043F",
                                "0440","0441","0442","0443","0444","0445","0446","0447","0448","0449","044A","044B","044C","044D","044E","044F",
                                "0020","0451","0452","0453","0454","0455","0456","0457","0458","0459","045A","045B","045C","0020","045E","045F",
                                "0020","00A7","0020","0216"};
 
    for(int ln = 0; ln < strlen(ref_char); ln++){
        
        uint8_t output = ref_char[ln];
        
        if(output <= 0x7F){
            for(int fnd = 0; fnd < 196; fnd++){
                if (strncmp(&ref_char[ln], std_symb[fnd], 1)==0) { res = res + ucs2_symb[fnd]; fnd = 196; }
            }
        }
        else if(output > 0x7F && output <= 0xDF){
            for(int fnd = 0; fnd < 196; fnd++){
                if (strncmp(&ref_char[ln], std_symb[fnd], 2)==0) { res = res + ucs2_symb[fnd]; fnd = 196; }
            }
        ln++;
        }
        else if(output > 0xDF && output <= 0xEF){
            for(int fnd = 0; fnd < 196; fnd++){
                if (strncmp(&ref_char[ln], std_symb[fnd], 3)==0) { res = res + ucs2_symb[fnd]; fnd = 196; }
            }
        ln+=2;
        }
        else{
            for(int fnd = 0; fnd < 196; fnd++){
                if (strncmp(&ref_char[ln], std_symb[fnd], 4)==0) { res = res + ucs2_symb[fnd]; fnd = 196; }
            }
        ln+=3;
        }
    }
    
    return res;
    
}
 
int main()
{
    string str = "Hello world! Привет мир!";
    std::cout<<CHAR_to_UCS2(str);
 
    return 0;
}
Добавлено через 3 минуты
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Кстати, зачем вам в вашей таблице столько пробелов?
там должны быть специальные символы типа табуляции или другое, но так как это используется редко в строках, я заменил это на пробелы. Да с точки зрения точной перекодировки это не правильно, однако как есть, кому надо, пусть заменят на спецсимволы.
0
 Аватар для Наталья8
621 / 379 / 67
Регистрация: 09.03.2016
Сообщений: 4,074
31.05.2024, 13:20
------------------------------------------------------
0
 Аватар для Наталья8
621 / 379 / 67
Регистрация: 09.03.2016
Сообщений: 4,074
01.06.2024, 01:39
Цитата Сообщение от Наталья8 Посмотреть сообщение
Вот так вас уважаемый, удовлетворит?
В том что я написал есть смысл.
Так как ты,
Передавать в функцию строку стринг.
Не один нормальный человек делать не станет.
0
7 / 8 / 3
Регистрация: 02.04.2018
Сообщений: 531
02.06.2024, 08:27  [ТС]
я не сомневаюсь в вашем опыте, скажите почему?
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
02.06.2024, 09:32
Цитата Сообщение от SergeyKagen Посмотреть сообщение
скажите почему?
копирование. Накладные расходны.
пердавайте как const std::string &value
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.06.2024, 09:32
Помогаю со студенческими работами здесь

Поиск позиции символа в строке
Здравствуйте, у меня есть строка со словом и строка с прочерками (--------), длина у них одинаковая, есть кнопки, на которых буквы...

Как осуществляется поиск символа в строке?
Объясните пожалуйста как осуществляется поиск символа в строке?алгоритм какой ?

Поиск символа а и А в строке после пробела
нужно найти количество слов начинающихся с а или А. #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { char str =...

Определить последнее вхождение символа “р” в строке и вывести строку, начиная с первого символа и до последнего “р” в строке
Заданы 2 строки, состоящие из слов, разделенных пробелами. Определить последнее вхождение символа “р” в строке и вывести строку, начиная с...

Поиск символа в строке wchar_t используя switch
А вообще возможно в switch запихнуть wchar_t? И если да, то как? Точнее в switch то получилось, а вот в case для этого switch ну никак не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru