Войти

Показать полную графическую версию : Помогите решить


drimis
24-12-2015, 19:42
Написать аналог функции UpperCase (в большие должны превращаться только латинские буквы).

K.A.V.
27-12-2015, 13:37
Помещаете текстовую строку в массив символов, затем проходитесь по каждому элементу массива со сравнением, если элемент массива латинская маленькая буква - переводите её в большую буковку. Сравнение элемента массива делаете непосредственно с конкретной буквой в латинском алфавите, типа такого:

if (m_templinebuf[i] == 'a')
m_templinebuf[i] = 'A';
else if (m_templinebuf[i] == 'b')
m_templinebuf[i] = 'B';
else if (m_templinebuf[i] == 'c')
m_templinebuf[i] = 'C';

Iska
27-12-2015, 21:00
Зачем так много сравнений, зачем массив? Просто пробегаемся указателем до конца строки, проверяя диапазон кода символа от 'a' до 'z', и при попадании вычитаем от него разницу ('a'-'A').

Drongo
31-12-2015, 14:35
Зачем так много сравнений, зачем массив? Просто пробегаемся указателем до конца строки, проверяя диапазон кода символа от 'a' до 'z', и при попадании вычитаем от него разницу ('a'-'A'). »Понял твою идею, но не понял немного что из чего вычитается?

Код 'A' = 65, 'a' = 97, если вычитать 97 - 65, то мы получим разницу, т.е. 32 и на всех парах B = b, C = c эта разница 32 неизменна

65 = A
66 = B
67 = C
68 = D
69 = E
70 = F
71 = G
72 = H
73 = I
74 = J
75 = K
76 = L
77 = M
78 = N
79 = O
80 = P
81 = Q
82 = R
83 = S
84 = T
85 = U
86 = V
87 = W
88 = X
89 = Y
90 = Z


97 = a
98 = b
99 = c
100 = d
101 = e
102 = f
103 = g
104 = h
105 = i
106 = j
107 = k
108 = l
109 = m
110 = n
111 = o
112 = p
113 = q
114 = r
115 = s
116 = t
117 = u
118 = v
119 = w
120 = x
121 = y
122 = z


У меня ничего не приходит на ум кроме как такого изврата. :)

...
AnsiString str = "MySting#1TeSt-результат проверки";
AnsiString newstr = "";
int len = str.Length();
char *ch;
ch = str.c_str();

for(int i = 0; i <= len; i++){
if(97 <= (int)ch[i] && 122 >= (int)ch[i])
newstr += ch[i];
else if(65 <= (int)ch[i] && 90 >= (int)ch[i])
newstr += char((int)ch[i] + 32);
}
Memo1->Lines->Add(newstr);
...

P.S. Немного наоборот сделал: UpperCase -> LowerCase

Iska
31-12-2015, 16:05
Код 'A' = 65, 'a' = 97, если вычитать 97 - 65, то мы получим разницу, т.е. 32 и на всех парах B = b, C = c эта разница 32 неизменна »
Ну да. Просто не писать её «ручками», как константу, а однократно определять эту разницу через любую пару «строчная - ЗАГЛАВНАЯ».

но не понял немного что из чего вычитается? »
Из кода символа вычитается эта самая постоянная разница, т.е.:
Новый_код_символа = Старый_код_символа - (Код_символа_a - Код_символа_A)

tratata55
04-02-2016, 03:12
Срочно нужна помощь!!!! с командировки задержался а завтра последний день сдачи, не оставайтесь равнодушными!!)) надо на с++ 6 заданий сделать:

1) Поле шахматной доски определяется парой натуральных чисел, каждое из которых не превосходит восьми: первое число – номер вертикали при счете слева направо, второе – номер горизонтали при счете снизу вверх. Даны натуральные числа k, l, m, n, каждое из которых не превосходит восьми. На поле (k,l) расположен слон. Угрожает ли он полю (m,n) )?

2) Дан правильный N-угольник с центром в точке (X, Y) и с радиусом описанной окружности R. Найти координаты всех вершин многоугольника.

3) Дана строка символов. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелы внутри себя, будем называть словами. Найти слова, у которых первый и последний символы совпадают. Подсчитать их количество.

4) Изобразить на экране прямоугольник с круглым отверстием, стороны которого окрашены в разные цвета, вращающийся вокруг горизонтальной или вертикальной оси с постоянной угловой скоростью.

5) Дан текстовый файл F. Переписать в другой файл G все строки, содержащие цифры.

6) Дан файл координат вершин ломаной линии на плоскости. Определить, имеет ли ломаная линия самопересечения, если да, то записать в файл G координаты точек самопересечения.




© OSzone.net 2001-2012