Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
#1

Какой код у тире? - C++

12.04.2013, 20:39. Просмотров 1628. Ответов 40
Метки нет (Все метки)

Которое
HTML5
1
–
.
C++
1
'\n'
- другой символ.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2013, 20:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Какой код у тире? (C++):

какой код - C++
Какой код на такую программу: слева должно быть 2 кнопки. Выбрать, и отмена. Когда НАВОДИШЬ на выбрать,слева,пишут краткое описание,и когда...

Посмотрите какой код - C++
необходимо написать альтернативу этому коду #include <iostream> #include <locale> #include <time.h> #include <vector> ...

Какой код у символа ` - C++
Который без шифта на копке с тильдой и буквой ё.

Какой код у символа конца текста - C++
Пытаюсь написать лексический анализатор, который считывает текст из файла: if (ch==' '||ch=='\n'||ch=='\t'||ch==',') { ...

Код какой то простой игры в язике С++ - C++
Кто может скиньте пожалуйста код какой то простой игры в язике С++. Пожалуйста.

польская запись,нашел какой то код - C++
char * pol(char * in, char * out) { st *OPR=NULL; int k,point; k=point=0; while(in!='\0' && in!='=') // пока не дойдем до равно...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
12.04.2013, 21:12 #2
так вот же http://liveworkspace.org/code/xPr3P$0
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.04.2013, 21:15  [ТС] #3
Мне для TextOut, внутри длинной строки и она ещё подвергается двойному преобразованию из нультерминальной в std::sring и обратно. Куда я этот Lпрефикс дену?
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
12.04.2013, 21:15 #4
спешл фор ю
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
12.04.2013, 21:19 #5
Цитата Сообщение от taras atavin Посмотреть сообщение
внутри длинной строки и она ещё подвергается двойному преобразованию из нультерминальной в std::sring и обратно. Куда я этот Lпрефикс дену?
так ndash'а нету в ASCII таблице (то, что по ссылке выше называют ASCII на самом деле таковым не является). Этот символ кодируется двумя байтами, так что придется использовать wchar_t, если этот ndash очень нужен.

Добавлено через 2 минуты
А, есть же TextOutW(), не подходит?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.04.2013, 21:25  [ТС] #6
Цитата Сообщение от Kastaneda Посмотреть сообщение
А, есть же TextOutW(), не подходит?
Как бороться с
C:\tsserver\Projects\cpp\codeblocks\MyComp\language\aboutmmz\aboutmmz.cpp|195|error: cannot convert 'char*' to 'LPCWSTR {aka const wchar_t*}' for argument '4' to 'BOOL TextOutW(HDC, int, int, LPCWSTR, int)'|
?
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
12.04.2013, 21:26 #7
код покажи, ты char* вместо wchar_t* подсовываешь.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.04.2013, 21:27  [ТС] #8
И как вообще переделать
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
//=================================================================================================
void                          LeftText                       (HDC                   &Context     ,
                                                              int                    Left        ,
                                                              int                    Red         ,
                                                              int                    Top         ,
                                                              int                    Right       ,
                                                              std::string            Text        ,
                                                              int                   &EndX        ,
                                                              int                   &EndY1       ,
                                                              int                   &EndY2       )
{
 int          CharWidth;
 int          CharHeight;
 int          x;
 int          WordRight;
 SIZE         WordSize;
 int          y;
 size_t       L;
 TEXTMETRIC   TextMetrics;
 std::string  Word;
 char        *p;
 GetTextMetrics(Context, &TextMetrics);
 CharWidth=TextMetrics.tmAveCharWidth;
 CharHeight=TextMetrics.tmHeight+TextMetrics.tmExternalLeading;
 for (x=Left+Red, y=Top+CharHeight; !Text.empty(); )
 {
  Word=FirstWord(Text);
  p=(char *)Word.c_str();
  L=Word.length();
  GetTextExtentPoint32(Context, p, L, &WordSize);
  WordRight=x+WordSize.cx;
  if (WordRight>=Right)
  {
   x=Left;
   WordRight=x+WordSize.cx;
   y+=CharHeight*3/2;
  }
  TextOut(Context, x, y, p, L);
  x=WordRight+CharWidth;
 }
 EndX=x;
 EndY1=y-CharHeight;
 EndY2=EndY1+CharHeight*3/2;
}
//=================================================================================================
std::string                   FirstWord                      (std::string           &Text        )
{
 size_t        i;
 size_t        L;
 unsigned char c;
 bool          Flag;
 std::string   Result;
 for (L=Text.length(), i=0, Result="", Flag=false; i<L; ++i)
 {
  c=Text[i];
  if (c<=32)
  {
   if (Flag)
   {
    Text.erase(Text.begin(), Text.begin() + i);
    return Result;
   }
   continue;
  }
  Flag=true;
  Result=Result+(char)c;
 }
 Text="";
 return Result;
}
//=================================================================================================
void                          CenterText                     (HDC                   &Context     ,
                                                              int                    Left        ,
                                                              int                    Top         ,
                                                              int                    Right       ,
                                                              std::string            Text        ,
                                                              int                   &EndY        )
{
 int          RowWidth;
 int          StringWidth;
 std::string  Buffer;
 std::string  Word;
 TEXTMETRIC   TextMetrics;
 char        *p;
 size_t       L;
 size_t       Words;
 int          CharWidth;
 int          CharHeight;
 int          WordRight;
 SIZE         WordSize;
 bool         Flag;
 int          x;
 int          y;
 GetTextMetrics(Context, &TextMetrics);
 CharWidth=TextMetrics.tmAveCharWidth;
 CharHeight=TextMetrics.tmHeight+TextMetrics.tmExternalLeading;
 RowWidth=Right+Left;
 y=Top+CharHeight;
 for (Text; !Text.empty(); )
 {
  for (Flag=false, Buffer=Text, StringWidth=0, Words=0; (StringWidth<RowWidth)&&(!Buffer.empty()); )
  {
   Word=FirstWord(Buffer);
   p=(char *)Word.c_str();
   L=Word.length();
   GetTextExtentPoint32(Context, p, L, &WordSize);
   WordRight=StringWidth+WordSize.cx;
   if (Flag)
   {
    WordRight+=CharWidth;
   }
   Flag=true;
   if (WordRight>=RowWidth)
   {
    break;
   }
   StringWidth=WordRight;
   ++Words;
  }
  x=(Left+Right-StringWidth)/2;
  for (; Words>0; --Words)
  {
   Word=FirstWord(Text);
   p=(char *)Word.c_str();
   L=Word.length();
   GetTextExtentPoint32(Context, p, L, &WordSize);
   TextOut(Context, x, y, p, L);
   x+=WordSize.cx;
   x+=CharWidth;
  }
  y+=CharHeight*3/2;
 }
 EndY=y-CharHeight;
}
//=================================================================================================
на TextOutW?
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
12.04.2013, 21:37 #9
Вместо std::string испльзуй std::wstring. Все char замени на wchar_t, ко всем строковым константам (те, что в кавычках) подпиши L спереди. Саму логику в коде менять не надо, если код написан граммотно, то после этих изменений все должно заработать.

Добавлено через 4 минуты
вот таких вещей
C++
1
if (c<=32)
вообще не должно быть, этой строкой ты жестко привязался к ASCII кодам. Если нужен пробел, так и пиши
C++
1
if (c <= ' ')
соответственно для wchar_t будет так
C++
1
if (c <= L' ')
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.04.2013, 21:38  [ТС] #10
А преобразование то же
C++
1
.c_str()
?
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
12.04.2013, 21:40 #11
Цитата Сообщение от taras atavin Посмотреть сообщение
А преобразование то же
C++
1
.c_str()
?
у std::wstring метод c_str() возвращает указатель на wchar_t, т.е. все стандартные методы работают без изменений, как ожидается.
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.04.2013, 21:42  [ТС] #12
Цитата Сообщение от Kastaneda Посмотреть сообщение
вообще не должно быть, этой строкой ты жестко привязался к ASCII кодам.
В ASCII все невидимые символы, табуляция, переводы строки/каретки до пробела. И сам пробел ещё. А как это условие будет, если не привязываться к ASCII?
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
12.04.2013, 21:43 #13
т.е. Си-строка - это не последовательность ASCII символов, это последовательность char или wchar_t заканчивющаяся null character.

Добавлено через 48 секунд
Цитата Сообщение от taras atavin Посмотреть сообщение
В ASCII все невидимые символы, табуляция, переводы строки/каретки до пробела. И сам пробел ещё. А как это условие будет, если не привязываться к ASCII?
ну я ж показал, так и писать
C++
1
' '
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
12.04.2013, 21:45  [ТС] #14
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
 LeftText(Context, Left, 64, 0, Right, L"Угловые скобки в данном документе являются метасимволами и означают замену заключённого в них текста конкретным текстом в том и только в том случае, если и сами эти скобки, и текст в них набран синим, чёрный цвет соотвествует обычным символам.", x, y1, y2);
//=================================================================================================
void                          LeftText                       (HDC                   &Context     ,
                                                              int                    Left        ,
                                                              int                    Red         ,
                                                              int                    Top         ,
                                                              int                    Right       ,
                                                              std::wstring           Text        ,
                                                              int                   &EndX        ,
                                                              int                   &EndY1       ,
                                                              int                   &EndY2       )
{
 int          CharWidth;
 int          CharHeight;
 int          x;
 int          WordRight;
 SIZE         WordSize;
 int          y;
 size_t       L;
 TEXTMETRIC   TextMetrics;
 std::string  Word;
 wchar_t     *p;
 GetTextMetrics(Context, &TextMetrics);
 CharWidth=TextMetrics.tmAveCharWidth;
 CharHeight=TextMetrics.tmHeight+TextMetrics.tmExternalLeading;
 for (x=Left+Red, y=Top+CharHeight; !Text.empty(); )
 {
  Word=FirstWord(Text);
  p=(wchar_t *)Word.c_str();
  L=Word.length();
  GetTextExtentPoint32(Context, p, L, &WordSize);
  WordRight=x+WordSize.cx;
  if (WordRight>=Right)
  {
   x=Left;
   WordRight=x+WordSize.cx;
   y+=CharHeight*3/2;
  }
  TextOut(Context, x, y, p, L);
  x=WordRight+CharWidth;
 }
 EndX=x;
 EndY1=y-CharHeight;
 EndY2=EndY1+CharHeight*3/2;
}
//=================================================================================================
std::wstring                  FirstWord                      (std::wstring          &Text        )
{
 size_t           i;
 size_t           L;
 unsigned wchar_t c;
 bool             Flag;
 std::string      Result;
 for (L=Text.length(), i=0, Result=L"", Flag=false; i<L; ++i)
 {
  c=Text[i];
  if (c<=L' ')
  {
   if (Flag)
   {
    Text.erase(Text.begin(), Text.begin() + i);
    return Result;
   }
   continue;
  }
  Flag=true;
  Result=Result+(wchar_t)c;
 }
 Text="";
 return Result;
}
//=================================================================================================
void                          CenterText                     (HDC                   &Context     ,
                                                              int                    Left        ,
                                                              int                    Top         ,
                                                              int                    Right       ,
                                                              std::wstring           Text        ,
                                                              int                   &EndY        )
{
 int          RowWidth;
 int          StringWidth;
 std::string  Buffer;
 std::string  Word;
 TEXTMETRIC   TextMetrics;
 wchar_t     *p;
 size_t       L;
 size_t       Words;
 int          CharWidth;
 int          CharHeight;
 int          WordRight;
 SIZE         WordSize;
 bool         Flag;
 int          x;
 int          y;
 GetTextMetrics(Context, &TextMetrics);
 CharWidth=TextMetrics.tmAveCharWidth;
 CharHeight=TextMetrics.tmHeight+TextMetrics.tmExternalLeading;
 RowWidth=Right+Left;
 y=Top+CharHeight;
 for (Text; !Text.empty(); )
 {
  for (Flag=false, Buffer=Text, StringWidth=0, Words=0; (StringWidth<RowWidth)&&(!Buffer.empty()); )
  {
   Word=FirstWord(Buffer);
   p=(wchar_t *)Word.c_str();
   L=Word.length();
   GetTextExtentPoint32(Context, p, L, &WordSize);
   WordRight=StringWidth+WordSize.cx;
   if (Flag)
   {
    WordRight+=CharWidth;
   }
   Flag=true;
   if (WordRight>=RowWidth)
   {
    break;
   }
   StringWidth=WordRight;
   ++Words;
  }
  x=(Left+Right-StringWidth)/2;
  for (; Words>0; --Words)
  {
   Word=FirstWord(Text);
   p=(wchar_t *)Word.c_str();
   L=Word.length();
   GetTextExtentPoint32(Context, p, L, &WordSize);
   TextOut(Context, x, y, p, L);
   x+=WordSize.cx;
   x+=CharWidth;
  }
  y+=CharHeight*3/2;
 }
 EndY=y-CharHeight;
}
//=================================================================================================
C:\tsserver\Projects\cpp\codeblocks\MyComp\language\aboutmmz\aboutmmz.cpp|153|error: converting to execution character set: Illegal byte sequence|
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
12.04.2013, 21:46 #15
если нужно проверить, что символ является печатным, то можно использовать isprint().

Цитата Сообщение от taras atavin Посмотреть сообщение
C:\tsserver\Projects\cpp\codeblocks\MyComp\language\aboutmmz \aboutmmz.cpp|153|error: converting to execution character set: Illegal byte sequence|
это на какую строку ругается? У тебя в коде нет 153 строки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2013, 21:46
Привет! Вот еще темы с ответами:

Работа с матрицей. Какой необходим код? - C++
Дан двумерный массив размера 3x4. Найти максимальный элемент во второй строке. Вывести на экран максимальный элемент и номера его строки и...

Подключение текстового файла. Какой код - C++
Пожалуйста, помогите написать код на С++ по задаче. -Задача- Дан файл, содержащий зашифрованный русский текст. Каждая буква заменяется...

Сформировать список. Какой будет код к задаче? - C++
Сформировать список L, включив в него по одному разу элементы, которые входят хотя бы в один из списков L1 и L2, но в то же время не входят...

Киньте код какой нибудь простейшей утилиты на С++ - C++
Здравствуйте, очень нужна помощь, мне для проведения пары нужна простейшая утилита для Windows написаная на C++, я всегда просто работал на...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.04.2013, 21:46
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru