История изменений
Исправление linuhs_user, (текущая версия) :
#include <uchar.h>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
// Длинна без повторений
// Не используется, но пусть будет.
size_t u_lenwrep(const char32_t* src)
{
size_t i, k, len;
if(!*src) return 0;
for(i = 1, len = 1;src[i];i++, len++) {
if(src[i] == src[i-1]) {
for(k = i + 1;src[k] && src[k] == src[i];k++);
if(!(i = k)) break;
}
}
return len;
}
// Копирование в dest строки src но без повторений
size_t u_cpywrep(char32_t* dest, const char32_t* src)
{
size_t i, j;
if(!*src) return 0;
*dest = *src;
for(i = 1, j = 1;src[j];i++, j++) {
if(dest[i-1] == src[j])
for(j++;src[j] == dest[i-1];j++);
if(!(dest[i] = src[j])) break;
}
return i;
}
// Вывод char32_t строки
void u_print(char32_t* str)
{
mbstate_t state;
char utf8_char[MB_CUR_MAX];
size_t len;
for(;*str;str++) {
len = c32rtomb(utf8_char, *str, &state);
printf("%.*s", (int)len, utf8_char);
}
}
int main(int argc, char** argv)
{
setlocale(LC_ALL, "en_US.utf8");
char32_t str[] = U"юююнииикоооддд неее ннуужжооонн";
u_cpywrep(str, str);
u_print(str);
return EXIT_SUCCESS;
}
Исправление linuhs_user, :
#include <uchar.h>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
// Длинна без повторений
// Не используется, но пусть будет.
size_t u_lenwrep(const char32_t* src)
{
size_t i, k, len;
if(!*src) return 0;
for(i = 1, len = 1;src[i];i++, len++) {
if(src[i] == src[i-1]) {
for(k = i + 1;src[k] && src[k] == src[i];k++);
if(!(i = k)) break;
}
}
return len;
}
// Копирование в dest строки src но без повторений
size_t u_cpywrep(char32_t* dest, const char32_t* src)
{
size_t i, j;
if(!*src) return 0;
*dest = *src;
for(i = 1, j = 1;src[j];i++, j++) {
if(dest[i-1] == src[j])
for(j++;src[j] == dest[i-1];j++);
if(!(dest[i] = src[j])) break;
}
return i;
}
// Вывод char32_t строки
void u_print(char32_t* str)
{
mbstate_t state;
char utf8_char[MB_CUR_MAX];
size_t len;
for(;*str;str++) {
len = c32rtomb(utf8_char, *str, &state);
printf("%.*s", (int)len, utf8_char);
}
}
int main(int argc, char** argv)
{
setlocale(LC_ALL, "en_US.utf8");
char32_t str[] = U"юююнииикоооддд неее ннуужжооонн";
u_cpywrep(str, str);
u_print(str);
return(EXIT_SUCCESS);
}
Исправление linuhs_user, :
#include <uchar.h>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
// Длинна без повторений
// Не используется, но пусть будет.
size_t u_lenwrep(const char32_t* src)
{
size_t i, k, len;
if(!*src) return 0;
for(i = 1, len = 1;src[i];i++, len++) {
if(src[i] == src[i-1]) {
for(k = i + 1;src[k] && src[k] == src[i];k++);
if((i = k) == 0) break;
}
}
return len;
}
// Копирование в dest строки src но без повторений
size_t u_cpywrep(char32_t* dest, const char32_t* src)
{
size_t i, j;
if(!*src) return 0;
*dest = *src;
for(i = 1, j = 1;src[j];i++, j++) {
if(dest[i-1] == src[j])
for(j++;src[j] == dest[i-1];j++);
if(!(dest[i] = src[j])) break;
}
return i;
}
// Вывод char32_t строки
void u_print(char32_t* str)
{
mbstate_t state;
char utf8_char[MB_CUR_MAX];
size_t len;
for(;*str;str++) {
len = c32rtomb(utf8_char, *str, &state);
printf("%.*s", (int)len, utf8_char);
}
}
int main(int argc, char** argv)
{
setlocale(LC_ALL, "en_US.utf8");
char32_t str[] = U"юююнииикоооддд неее ннуужжооонн";
u_cpywrep(str, str);
u_print(str);
return(EXIT_SUCCESS);
}
Исходная версия linuhs_user, :
#include <uchar.h>
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
// Длинна без повторений
size_t u_lenwrep(const char32_t* src)
{
size_t i, k, len;
if(!*src) return 0;
for(i = 1, len = 1;src[i];i++, len++) {
if(src[i] == src[i-1]) {
for(k = i + 1;src[k] && src[k] == src[i];k++);
if((i = k) == 0) break;
}
}
return len;
}
// Копирование в dest строки src но без повторений
size_t u_cpywrep(char32_t* dest, const char32_t* src)
{
size_t i, j;
if(!*src) return 0;
*dest = *src;
for(i = 1, j = 1;src[j];i++, j++) {
if(dest[i-1] == src[j])
for(j++;src[j] == dest[i-1];j++);
if(!(dest[i] = src[j])) break;
}
return i;
}
// Вывод char32_t строки
void u_print(char32_t* str)
{
mbstate_t state;
char utf8_char[MB_CUR_MAX];
size_t len;
for(;*str;str++) {
len = c32rtomb(utf8_char, *str, &state);
printf("%.*s", (int)len, utf8_char);
}
}
int main(int argc, char** argv)
{
setlocale(LC_ALL, "en_US.utf8");
char32_t str[] = U"юююнииикоооддд неее ннуужжооонн";
u_cpywrep(str, str);
u_print(str);
return(EXIT_SUCCESS);
}