gpt4 book ai didi

c - 游程代码解码中数组的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 16:24:38 26 4
gpt4 key购买 nike

((如果您懂德语,则链接到原始问题:https://stepik.org/lesson/193516/step/9?unit=167933)

任务:每当输入中有错误时, printf("falsche eingabe") ,如果一切正确,则打印解码后的版本。还有两种模式(单(abc)/多(aaa)),每当模式发生变化时,您还需要打印“'”(起始模式是单模式。)

示例输入 1:

abcdefghijklmnopqrstuvwxyzabcdefghijkl

示例输出 1:

错误的行为

示例输入 2:

abcdefg

示例输出 2:

abcdefg

示例输入 3:

'a2b3c2d2'efg

示例输出 3:

aabbbccddefg

嗨。这是我的作业,我已经设法通过解码输入并考虑原始输入错误的每种情况来完成它。然后我想好吧..这不应该是最好的方法。因此我决定解码代码并再次编码回来,如果保存的输入与我的编码版本匹配,则打印解码的数据,否则,错误。问题是每当我尝试输入时1-'a22- 斧头

解码无法正常工作。我得到的结果像1- 氨基酸* || aa|||啊? || .....(aa + 随机标记)2- 斧头 + 随机符号

当我尝试使用相同逻辑但长度更长的输入时,程序运行得很好。

如果有人知道并展示修复解码的方法,我会很高兴。如果可能的话,我也不想仅仅通过在最后添加一个 for 循环来解决这个问题..

谢谢你了

#include <stdio.h>

int main()
{
char el[50];
scanf("%s", &el); // 'a2b2c3'dfh
char saved[50]; // 'a2b2c3'dfh
char decoded[50]; //aabbcccdfh

int k, h, y = -1, b = -1; //

int multi = 0; //(while decoding) 1 -> multi , 0 -> not
char encoded[50]; // 'a2b2c3'dfh
int multi2 = 0; //(while encoding)

for (k = 0; el[k] != '\0'; k++) { //saving

saved[k] = el[k]; // 'a2b2c3'dfh
}

for (k = 0; el[k] != '\0'; k++) { //decoding

if (el[k] == 39) {
continue;
}

if (50 <= el[k + 1] && el[k + 1] <= 57) { // 2->9
if (multi == 0)
multi = 1;
}

if (multi == 0) {
y++;
decoded[y] = el[k];
}

else { //multi ==1 //a2
for (h = 0; h < (int)el[k + 1] - 48; h++) {

y++;
decoded[y] = el[k];
multi = 0;
}

k++;
}

} // decoded = aabbcccdfh ( hier ist k = laenge )

if (k > 30) {
printf("falsche eingabe");
return 0;
}

for (k = 0; k < y + 1; k++) {
if (decoded[k] == decoded[k + 1]) {

if (multi2 == 0) {
multi2 = 1;
b++;
encoded[b] = 39;
}
}

if (multi2 == 0) {
b++;
encoded[b] = decoded[k];
}
else {
b++;
encoded[b] = decoded[k];
// 0 -> decoded[k], 1 -> for, 2-> '

for (h = k; decoded[h] == decoded[h + 1]; h++)
;

b++;
encoded[b] = ((h - k + 48) + 1);

k = h;

if (decoded[k + 1] != decoded[k + 2]) {
multi2 = 0;
b++;
encoded[b] = 39;
}
}
}

//wurde die erste eingabe richtig codiert ? ( also gibt es fehler oder nicht ? )

for (k = 0; saved[k] != '\0'; k++) {
if (saved[k] != encoded[k]) {
printf("falsche eingabe\n");
return 0;
}
}
printf("%s", decoded);
}

我试图尽可能清楚地表达出来,如果可以更清楚的话,我很抱歉。

最佳答案

规范说:

  • 它以单一模式启动

  • 当看到'时,它会在模式之间切换

  • 在多模式中,字母 (Zeichen) 后面跟着一个数字(Ziffer,因此是一个单个数字),表示该字母 (Zeichen) 必须重复的频率。 (因此最大重复次数为 9。)

只需按照指定的方式实现即可。

示例:

abc'd2e4'ma'r2 --> abcddeeeemarr

关于c - 游程代码解码中数组的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53597046/

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