gpt4 book ai didi

c - 打印字符串时出错

转载 作者:行者123 更新时间:2023-12-01 01:24:42 26 4
gpt4 key购买 nike

我正在创建一种算法,该算法生成从 0 到 9999 的数字(类似字符串的数字)并在数组 a[50000] 中搜索它的频率。

  char key[4];
int freq;
for (int i = 0; i < 10000; i++) {
sprintf(key,"%04i",i); // save 4 digits in key, if i <1000 save leading 0's
freq = BruteForceStringMatch(key,a,n); //n length of a.
printf("%s-%i\n",key,freq);
}
free(a);

但是,当我运行程序时,我明白了。

.
.
.
9845-7
9846
-10
9847-4
9848-5
-139
9850-3
9851-6
9852-5
9853-4
9854-2
9855-7
9856-5
9857-4
9858-5
9859 -9
9860-3

.
.
.
9968-6
9969 -9
9970-5
9971-4
9972-7
9973-6
9974-6
9975-2
9976-7
9977-4
9978-2
9979-7
9980-3
9981-4
9982-3
9983 -9
9984-6
9985-7
998-8
9987 -9
9988-3
9989 -9
9990-4
9991-3
9992-5
9993-2
9994 -9
9995-5
9996-6
9997-7
9998-7

随机位置有制表符,有时键的最后一位被删除,有 139,113 等我不知道它们来自哪里。我正在使用 gcc 版本 5.4.0 (GCC) 并使用 Windows 10 和终端 babun 进行编译。

更多信息:

BruteForceStringMatch 搜索 a 中键的出现频率。

int BruteForceStringMatch(char key[4], char* a, int length ){
int freq=0;
int k;
for (int j = 0; j < length -4; j++) {
k =0;
while(k <4 && key[k] == a[j+k])
k=k+1;
if(k == 4)
freq++;
}
return freq;
}

我从一个有 5000 位数字的文件中得到一个。

FILE *inputfile;
char c;
int largo = 0;
char *a = (char *)malloc(50000*sizeof(char *));;
char *b = (char *)malloc(50000*sizeof(char *));;
inputfile = fopen("archivo_1.tex", "r");
if (inputfile == NULL) {
fprintf(stderr, "Failed to open the file.\n");
exit(1);
}
if (inputfile) {
for ( int i=0; (c = getc(inputfile)) != EOF; i++){
a[i] = c;
//putchar(a[i]);
largo++;
}
fclose(inputfile);
}

最佳答案

在我看来,您的问题是您将“键”定义为仅四个字符,而实际上它应该是五个——四位数字加上终止空值。这样 null 就出现在“freq”的第一个字节中……然后当您在第 5 行设置“freq”时,printf(第 6 行)将该值视为“key”字符串的一部分。特别是,您可以在值 9859 和 8859 的输出中看到这一点,其中“freq”的值恰好为 9,这是制表符的 ASCII 代码。此外,对于值 9846,“freq”为 10,这恰好是换行符(即换行符)的 ASCII 值,而在 9849 上,“freq”为 13,这是一个回车,因此打印“-13”超过 9849 的前三个字符。

关于c - 打印字符串时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43535422/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com