Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: C - wchar_t (towupper) - это русский заработало!  (Прочитано 813 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн victor00000

  • Автор темы
  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
// test_upp_low.c
// victor00000 (c) 2018

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
#include <wchar.h>
#include <wctype.h>
#include <stdint.h>
#include <ctype.h>

// ~$ gcc -Wall test_upp_low.c -o test_upp_low.lnx || echo ERR
// ~$ ./test_upp_low.lnx Форум русскоязычного "сообщества Ubuntu"

//=======================upper
void strupp (char *c){
int i = 0, l = strlen (c)+1;
wchar_t *wc = malloc (sizeof (wchar_t)*l);
swprintf (wc,l,L"%hs",c);
while (wc[i]){
wc[i] = towupper (wc[i]);
// wc[i] = towlower (wc[i]);
i++;
}
i = 0; l = 0;
while ( wc[i] ){
l += wctomb ( c+l, wc[i] );
i++;
}
c[l] = 0;
free (wc);
}

//===================m0
int main (int ia, char *ca[]){
if (ia == 1) return 1;
setlocale (LC_ALL, getenv ("LANG"));

char *c = 0;
int i = 1;
while (ca[i]){
if (c != 0){
free (c); c = 0;
}
c = strdup ( ca[i] );
strupp ( c );
printf ("%s", c);
if (i != ia) printf (" ");
i++;
}
if (c != 0) free (c);
puts ("");
return 0;
}
/*
4:L~/z18$
4:L~/z18$ echo; ./test_upp_low.lnx Форум русскоязычного "сообщества Ubuntu"

ФОРУМ РУССКОЯЗЫЧНОГО СООБЩЕСТВА UBUNTU
4:L~/z18$
*/
http://paste.ubuntu.com/p/pZVzgBCKXD/


Пользователь добавил сообщение 08 Сентября 2018, 04:22:16:
Цитировать
void strupp (char *c){
int i = 0, l = strlen (c)+1;
wchar_t *wc = malloc (sizeof (wchar_t)*l);
swprintf (wc,l,L"%hs",c);
while (wc[i]){
wc[i] = towupper (wc[i]);
// wc[i] = towlower (wc[i]);
i++;
}
i = 0; l = 0;
while ( wc[i] ){
l += wctomb ( c+l, wc[i] );
i++;
}
c[l] = 0;
free (wc);
}
на
void strupp (char *c){
int ll = 0, i = 0, l = strlen (c)+1;
wchar_t *wc = malloc (sizeof (wchar_t)*l);
swprintf (wc,l,L"%hs",c);
while (wc[i]){
wc[i] = towupper (wc[i]);
// wc[i] = towlower (wc[i]);
ll += wctomb ( c + ll, wc[i] );
i++;
}
c[ ll ] = 0;
free (wc);
}

Пользователь добавил сообщение 08 Сентября 2018, 06:18:11:
или
void strupp (char *c){
int /* ll = 0,*/ i = 0, l = strlen (c)+1;
wchar_t *wc = malloc (sizeof (wchar_t)*l);
swprintf (wc,l,L"%hs",c);
while (wc[i]){
wc[i] = towupper (wc[i]);
// wc[i] = towlower (wc[i]);
// ll += wctomb ( c + ll, wc[i] );
i++;
}
// c[ ll ] = 0;
sprintf (c,"%ls",wc);
free (wc);
}
« Последнее редактирование: 08 Сентября 2018, 06:18:11 от victor00000 »
Wars ~.o

 

Страница сгенерирована за 0.026 секунд. Запросов: 22.