我在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;
}
该计划确实:
将键盘输入读为字符串
将其保存到名为的字符串中 &#34;字母&#34;
在新行上的每个元素上打印到控制台
打印字符串长度
以各种可能的方式组合符号,除了在一个单词中重复两次某个位置后面的符号,并将组合写入文件&#34; combo.txt&#34;。
我的问题是,我可以用西里尔字母做这个,不仅仅是拉丁字母吗?
如果有可能(我相信它是),我应该在代码中添加或更改哪些内容?
答案 0 :(得分:1)
您可以使用西里尔字符执行此操作,是的。但是,这需要对一个相当复杂的主题进行一些学习。
将程序国际化需要了解区域设置,字符集和编码。尝试处理这些问题的现代方法是使用一个名为Unicode的字符集,通常使用名为UTF-8的编码(如果您使用的是类Unix操作系统)。在Windows上,您更有可能遇到UTF-16。
祝你好运!答案 1 :(得分:0)
使用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;
}
无论如何,问题仍然存在。如果我设法在别人之前解决它,我会在这里发布一个解决方案。 :)