#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <wchar.h>
#include <locale.h>
#define LENGTH 160
char buf[LENGTH] =
"тестовая русскоязычная строка "
"в UTF-8 с прямым порядком слов";
wchar_t wbuf[LENGTH];
void test(void)
{
char *loc;
int n;
loc = setlocale(LC_ALL, "");
wprintf(L"Преобразование UTF-8 символов в широкие (wchar_t):\n");
wprintf(L"Локаль программы установлена:\n\t%s\n", loc);
wprintf(L"Строка UTF-8 до преобразования:\n\t'%s'\n"
L"Длина UTF-8 строки:\n\t%d байт\n",
buf, strlen(buf));
n = mbstowcs(wbuf, buf, sizeof wbuf / sizeof wbuf[0] - 1);
wbuf[n] = L'\0';
wprintf(L"Преобразованная строка:\n\t'%ls'\n"
L"Длина преобразованной строки:\n\t%d символов (%d байт)\n",
wbuf, wcslen(wbuf), wcslen(wbuf) * sizeof(wchar_t));
}
int main(void)
{
test();
return 0;
}
[guest@localhost c]$ gcc -std=c99 -pedantic -Wall tr.c -o tr; ./tr
Преобразование UTF-8 символов в широкие (wchar_t):
Локаль программы установлена:
ru_RU.UTF-8
Строка UTF-8 до преобразования:
'тестовая русскоязычная строка в UTF-8 с прямым порядком слов'
Длина UTF-8 строки:
107 байт
Преобразованная строка:
'тестовая русскоязычная строка в UTF-8 с прямым порядком слов'
Длина преобразованной строки:
60 символов (240 байт)
[guest@localhost c]$
в grep массив чисел из вопроса неудобно засовывать
[guest@localhost ~]$ echo -e "001aaa.aaa\n002bbb.bbb\n003ccc.ccc\n004ddd.ddd"
001aaa.aaa
002bbb.bbb
003ccc.ccc
004ddd.ddd
[guest@localhost ~]$ echo -e "001aaa.aaa\n002bbb.bbb\n003ccc.ccc\n004ddd.ddd" | grep '^\(001\|003\)'
001aaa.aaa
003ccc.ccc
[guest@localhost ~]$
но, на мой взгляд, это все хорошее, что можно о нем сказать.
Вывод