Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/41: Рейтинг темы: голосов - 41, средняя оценка - 4.88
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
1

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

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

Author24 — интернет-сервис помощи студентам
Которое
HTML5
1
–
.
C++
1
'\n'
- другой символ.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.04.2013, 20:39
Ответы с готовыми решениями:

Преобразуем номер телефона, взяв код города в скобки, а пробелы и тире - удалить
Помогите плиз string q = "812 -12-34- 66"; Как подбирать все знаки пробелы и 812 взять в...

Word 2007 как отменить автозамену "-" тире на длиное тире "–" и маленьких букв на Большие
Товарищи приветствую Вас, и пожалуйста не ругайте! Поиском не нашел на форуме как отключить...

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

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

40
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
12.04.2013, 21:12 2
так вот же http://liveworkspace.org/code/xPr3P$0
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
12.04.2013, 21:15  [ТС] 3
Мне для TextOut, внутри длинной строки и она ещё подвергается двойному преобразованию из нультерминальной в std::sring и обратно. Куда я этот Lпрефикс дену?
0
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
12.04.2013, 21:15 4
спешл фор ю
0
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
12.04.2013, 21:19 5
Цитата Сообщение от taras atavin Посмотреть сообщение
внутри длинной строки и она ещё подвергается двойному преобразованию из нультерминальной в std::sring и обратно. Куда я этот Lпрефикс дену?
так ndash'а нету в ASCII таблице (то, что по ссылке выше называют ASCII на самом деле таковым не является). Этот символ кодируется двумя байтами, так что придется использовать wchar_t, если этот ndash очень нужен.

Добавлено через 2 минуты
А, есть же TextOutW(), не подходит?
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
12.04.2013, 21:25  [ТС] 6
Цитата Сообщение от Kastaneda Посмотреть сообщение
А, есть же TextOutW(), не подходит?
Как бороться с
C:\tsserver\Projects\cpp\codeblocks\MyComp\language\aboutmmz\aboutmmz.cpp|195|er ror: cannot convert 'char*' to 'LPCWSTR {aka const wchar_t*}' for argument '4' to 'BOOL TextOutW(HDC, int, int, LPCWSTR, int)'|
?
0
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
12.04.2013, 21:26 7
код покажи, ты char* вместо wchar_t* подсовываешь.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
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?
0
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
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' ')
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
12.04.2013, 21:38  [ТС] 10
А преобразование то же
C++
1
.c_str()
?
0
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
12.04.2013, 21:40 11
Цитата Сообщение от taras atavin Посмотреть сообщение
А преобразование то же
C++
1
.c_str()
?
у std::wstring метод c_str() возвращает указатель на wchar_t, т.е. все стандартные методы работают без изменений, как ожидается.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
12.04.2013, 21:42  [ТС] 12
Цитата Сообщение от Kastaneda Посмотреть сообщение
вообще не должно быть, этой строкой ты жестко привязался к ASCII кодам.
В ASCII все невидимые символы, табуляция, переводы строки/каретки до пробела. И сам пробел ещё. А как это условие будет, если не привязываться к ASCII?
0
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
12.04.2013, 21:43 13
т.е. Си-строка - это не последовательность ASCII символов, это последовательность char или wchar_t заканчивющаяся null character.

Добавлено через 48 секунд
Цитата Сообщение от taras atavin Посмотреть сообщение
В ASCII все невидимые символы, табуляция, переводы строки/каретки до пробела. И сам пробел ещё. А как это условие будет, если не привязываться к ASCII?
ну я ж показал, так и писать
C++
1
' '
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
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|er ror: converting to execution character set: Illegal byte sequence|
0
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
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 строки.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
12.04.2013, 21:49  [ТС] 16
C++
1
GetTextExtentPoint32(Context, p, L, &WordSize);
C:\tsserver\Projects\cpp\codeblocks\MyComp\language\aboutmmz\aboutmmz.cpp|148|wa rning: variable 'Left' set but not used [-Wunused-but-set-variable]|
Добавлено через 38 секунд
Цитата Сообщение от Kastaneda Посмотреть сообщение
это на какую строку ругается? У тебя в коде нет 153 строки.
На
C++
1
LeftText(Context, Left, 64, 0, Right, L"Угловые скобки в данном документе являются метасимволами и означают замену заключённого в них текста конкретным текстом в том и только в том случае, если и сами эти скобки, и текст в них набран синим, чёрный цвет соотвествует обычным символам.", x, y1, y2);
0
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
12.04.2013, 21:51 17
во первых замени тогда уж GetTextExtentPoint32 на GetTextExtentPoint32W (хотя там IDE сама это разрулить может, но я бы не надеялся).
и у тебя p это wchar_t*, а Word так и осталось std::string.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
12.04.2013, 21:52  [ТС] 18
Цитата Сообщение от Kastaneda Посмотреть сообщение
если нужно проверить, что символ является печатным, то можно использовать isprint().
Пробельные символы тоже считаются не печатными?
0
5232 / 3205 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
12.04.2013, 21:55 19
Цитата Сообщение от taras atavin Посмотреть сообщение
converting to execution character set: Illegal byte sequence|
короче гугл говорит, что тебе нужно настройках проект указать, что ты работаешь с юникодом.
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
12.04.2013, 21:57  [ТС] 20
даблю отловил.
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::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::wstring  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();
  GetTextExtentPoint32W(Context, p, L, &WordSize);
  WordRight=x+WordSize.cx;
  if (WordRight>=Right)
  {
   x=Left;
   WordRight=x+WordSize.cx;
   y+=CharHeight*3/2;
  }
  TextOutW(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::wstring     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=L"";
 return Result;
}
//=================================================================================================
void                          CenterText                     (HDC                   &Context     ,
                                                              int                    Left        ,
                                                              int                    Top         ,
                                                              int                    Right       ,
                                                              std::wstring           Text        ,
                                                              int                   &EndY        )
{
 int           RowWidth;
 int           StringWidth;
 std::wstring  Buffer;
 std::wstring  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();
   GetTextExtentPoint32W(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();
   GetTextExtentPoint32W(Context, p, L, &WordSize);
   TextOutW(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|er ror: converting to execution character set: Illegal byte sequence|
на
C++
1
LeftText(Context, Left, 64, 0, Right, L"Угловые скобки в данном документе являются метасимволами и означают замену заключённого в них текста конкретным текстом в том и только в том случае, если и сами эти скобки, и текст в них набран синим, чёрный цвет соотвествует обычным символам.", x, y1, y2);
.
0
12.04.2013, 21:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2013, 21:57
Помогаю со студенческими работами здесь

Какой код лучше?
Ниже приводятся 2 примера быстрого выделения текста в TextBox-е для события GotFocus. Хотелось...

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

Какой же тут код?
Всем привет, ник мой говорящий, а потому прошу помочь) Какой код будет у такой программы? *MVC...

Какой код лучше?
Какой код лучше для поисковика, в смысле какой код более для поисковых роботов?...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru