LINUX.ORG.RU

Перевод в верхний регистр


0

0

Нужно char перевести в верхний регистр.
Проверяю, является ли символ буквой, в каком она регистре, а потом прибавляю к коду 32. Но выходит что-то странное:

char *so = "aA", s[2]; strcpy(s, so);
printf("Code %c: %i, code %c: %i\n", s[0], s[0], s[1], s[1]);

printf("\n---%i---\n", s[0]);
s[0] += 32;
printf("\n---%i---\n", s[0]);

Вывод:

Code a: 97, code A: 65

---97---

----127---

Как реализовать это? С++

anonymous

прибавлять надо 'A' - 'a', а это -32, а не +32

Reset ★★★★★
()

#include <stdio.h>
#include <string>

void f(std::string& s)
{
for (size_t i=0; i < s.size(); i++)
{
if ((s[i] >= 'a') && (s[i] <= 'z')) s[i] += 'A' - 'a';
}
}

int main()
{
std::string x = "I'm loving it !";

printf ("%s\n", x.c_str());
f(x);
printf ("%s\n", x.c_str());

return 0;
}

anonymous
()
Ответ на: комментарий от anonymous

>"I'm loving it !"

Незачёт :) Хотя смотря в каком контексте...

Selecter ★★★★
()

 char *so = "aA", s[2]; strcpy(s, so);
                  ^^^^^^^^^^^^^^^^^^^
                         Баг.

kosmonavt
()

Раз хочешь указателями вот тебе второй вариант:

#include <stdio.h>
#include <string>

void f(char *s)
{
while (*s)
{
if ((*s >= 'a') && (*s <= 'z')) *s += 'A' - 'a';
s++;
}
}

int main()
{
char *a = "I'm loving it !";

char *b = new char[strlen(a) + 1];

strcpy(b, a);

printf ("%s\n", b);
f(b);
printf ("%s\n", b);

delete[] b;

return 0;
}

anonymous
()
Ответ на: комментарий от anonymous

И тебе тут уже предлогали можно в качестве третьего варианта заменить строку:

if ((*s >= 'a') && (*s <= 'z')) *s += 'A' - 'a';

на строку:

*s = toupper(*s);

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.