Сохранить символы кириллицы в текстовом файле в C
Я относительно новый в C.
Следующая программа, которую я вставлю сюда, является просто иллюстрацией для моего вопроса.
#include <stdio.h>
#include <stdlib.h>
int main()
{
char letters[7];
int a, b, c, d, e, f, g;
printf("letters:\n");
gets(letters);
printf("%c",letters[0]);
printf("\n");
printf("%c",letters[1]);
printf("\n");
printf("%c",letters[2]);
printf("\n");
printf("%c",letters[3]);
printf("\n");
printf("%c",letters[4]);
printf("\n");
printf("%c",letters[5]);
printf("\n");
printf("%c",letters[6]);
printf("\n");
printf("\n");
printf("%d\n",sizeof(letters));
FILE*fptr;
fptr=fopen("combo.txt", "w");
for(a=0;a<=sizeof(letters)-1;a++)
{
for(b=0;b<=sizeof(letters)-1;b++)
{
for(c=0;c<=sizeof(letters)-1;c++)
{
for(d=0;d<=sizeof(letters)-1;d++)
{
for(e=0;e<=sizeof(letters)-1;e++)
{
for(f=0;f<=sizeof(letters)-1;f++)
{
for(g=0;g<=sizeof(letters)-1;g++)
{
if (!(a==b||a==c||a==d||a==e||a==f||a==g||
b==c||b==d||b==e||b==f||b==g||
c==d||c==e||c==f||c==g||
d==e||d==f||d==g||
e==f||e==g||
f==g))
{
fprintf(fptr,"%c",letters[a]);
fprintf(fptr,"%c",letters[b]);
fprintf(fptr,"%c",letters[c]);
fprintf(fptr,"%c",letters[d]);
fprintf(fptr,"%c",letters[e]);
fprintf(fptr,"%c",letters[f]);
fprintf(fptr,"%c",letters[g]);
fprintf(fptr,"\n");
}
}
}
}
}
}
}
}
fclose(fptr);
return 0;
}
Программа делает:
читать ввод с клавиатуры как строку
сохранить его в строку под названием "буквы"
вывести в консоль каждый элемент на новой строке
выведите длину строки двумя строками ниже
объединять символы всеми возможными способами, за исключением повторения символа за определенной позицией дважды в слове и записи комбо в файл "combo.txt".
У меня вопрос, могу ли я сделать это с помощью символов кириллицы, не только латинскими буквами?
Если это возможно (я верю, что это так), что я должен добавить или изменить в своем коде?
2 ответа
Вы можете сделать это с кириллицей, да. Однако, это потребует некоторого изучения довольно сложной темы.
Интернационализация ваших программ требует понимания локалей, наборов символов и кодировок. Современный способ решения этих проблем - набор символов Unicode, обычно в кодировке UTF-8 (если вы работаете в Unix-подобных операционных системах). В Windows вы чаще сталкиваетесь с UTF-16.
Я рекомендую вам начать здесь: https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/
Удачи!
Улучшенная программа с fgets
вместо gets
выглядит так:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char letters[7];
int a, b, c, d, e, f, g;
printf("letters:\n");
//gets(letters);
fgets(letters,8,stdin);
printf("%c",letters[0]);
printf("\n");
printf("%c",letters[1]);
printf("\n");
printf("%c",letters[2]);
printf("\n");
printf("%c",letters[3]);
printf("\n");
printf("%c",letters[4]);
printf("\n");
printf("%c",letters[5]);
printf("\n");
printf("%c",letters[6]);
printf("\n");
printf("\n");
printf("%d\n",sizeof(letters));
FILE*fptr;
fptr=fopen("combo.txt", "w");
for(a=0;a<=sizeof(letters)-1;a++)
{
for(b=0;b<=sizeof(letters)-1;b++)
{
for(c=0;c<=sizeof(letters)-1;c++)
{
for(d=0;d<=sizeof(letters)-1;d++)
{
for(e=0;e<=sizeof(letters)-1;e++)
{
for(f=0;f<=sizeof(letters)-1;f++)
{
for(g=0;g<=sizeof(letters)-1;g++)
{
if (!(a==b||a==c||a==d||a==e||a==f||a==g||
b==c||b==d||b==e||b==f||b==g||
c==d||c==e||c==f||c==g||
d==e||d==f||d==g||
e==f||e==g||
f==g))
{
fprintf(fptr,"%c",letters[a]);
fprintf(fptr,"%c",letters[b]);
fprintf(fptr,"%c",letters[c]);
fprintf(fptr,"%c",letters[d]);
fprintf(fptr,"%c",letters[e]);
fprintf(fptr,"%c",letters[f]);
fprintf(fptr,"%c",letters[g]);
fprintf(fptr,"\n");
}
}
}
}
}
}
}
}
fclose(fptr);
return 0;
}
Во всяком случае, проблема все еще на линии. Если мне удастся решить это раньше кого-то, я опубликую решение здесь.:)