【发布时间】:2018-12-03 15:39:54
【问题描述】:
((如果您懂德语,则链接到原始问题:https://stepik.org/lesson/193516/step/9?unit=167933)
Task : printf("falsche eingabe") 每当输入中有错误时,如果一切正确,则只需打印解码后的版本。还有2种模式(单(abc)/多(aaa)),每当模式发生变化时,您还需要打印“'”(启动模式为单模式。)
示例输入 1:
abcdefghijklmnopqrstuvwxyzabcdefghijkl
样本输出 1:
虚幻
示例输入 2:
abcdefg
示例输出 2:
abcdefg
示例输入 3:
'a2b3c2d2'efg
示例输出 3:
aabbbccddefg
嗨。这是我的功课,我已经成功地做到了,只需解码输入并考虑原始输入错误的每个条件。然后我想好了..这不应该是最好的方法。因此我决定将代码解码并重新编码,如果保存的输入与我的编码版本匹配,则只需打印解码数据,否则出错。 问题是每当我尝试输入 1-'a2 2-斧头
解码不正确。我得到类似的结果 1- aa* ||啊||啊? || .....(aa + 一个随机标记) 2- ax + 一个随机符号
当我尝试使用相同逻辑但长度更长的输入时,程序运行良好。
如果有人知道并展示了修复解码的方法,我会很高兴。如果可能的话,我也不想通过在最后添加一个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);
}
我尽量说清楚,如果可以更清楚,我很抱歉。
【问题讨论】:
标签: c arrays run-length-encoding