Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Помогите решить (http://forum.oszone.net/showthread.php?t=309578)

drimis 24-12-2015 19:42 2588090

Помогите решить
 
Написать аналог функции UpperCase (в большие должны превращаться только латинские буквы).

K.A.V. 27-12-2015 13:37 2588758

Помещаете текстовую строку в массив символов, затем проходитесь по каждому элементу массива со сравнением, если элемент массива латинская маленькая буква - переводите её в большую буковку. Сравнение элемента массива делаете непосредственно с конкретной буквой в латинском алфавите, типа такого:
Код:

                       
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 2588858

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

Drongo 31-12-2015 14:35 2590144

Цитата:

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

Понял твою идею, но не понял немного что из чего вычитается?

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

UpperCase
Код:

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


LowerCase
Код:

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 2590175

Цитата:

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

Ну да. Просто не писать её «ручками», как константу, а однократно определять эту разницу через любую пару «строчная - ЗАГЛАВНАЯ».

Цитата:

Цитата Drongo
но не понял немного что из чего вычитается? »

Из кода символа вычитается эта самая постоянная разница, т.е.:
Код:

Новый_код_символа = Старый_код_символа - (Код_символа_a - Код_символа_A)

tratata55 04-02-2016 03:12 2602374

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

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

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

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

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

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

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


Время: 16:39.

Время: 16:39.
© OSzone.net 2001-