m0_62685905
2021-10-14 22:08
采纳率: 100%
浏览 30

输出的字符变成了方框怎么办

简单来说这道题要把同字符A*4(不让我打四个A)变成4A,异字符ABC变成1ABC1,1变成11;
现在我做了个结构数组ab,a存放按三种类型切割的字符串,b对应转码
然后输出不知道为什么会有框框
快疯了
input:AAAAAABCCCC12344
output:6A1B14C11123124
我的output:A1B1C1112314


#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

struct encryption{
    char a[10] = {0};
    char b[10] = {0};
};


int main ()
{
    char input[100];
    cin >>input; 
    int len = strlen(input);
    encryption str[100];
    //切割 ,后同前不同换行,前后都不同不换,前同不换,如果有1单独出列 (优先检查 
    //这段代码没有问题 
    for (int i=0,j=0,k=0;i<len;i++){
        if (input[i] == 49)
            str[k++].a[0] = 49;
        else if(input[i]!=input[i+1]&&input[i]==input[i-1]){
            str[k++].a[j] = input[i];
            j = 0;
        }
        else if(input[i]!=input[i+1]&&input[i+1]==input[i+2]){
            str[k++].a[j] = input[i];
            j = 0;
        }
        else
            str[k].a[j++] = input[i];
    }
    //转换
    for (int i=0;str[i].a[0];i++){
        if (str[i].a[0] == str[i].a[1]){            //同字符串 
            str[i].b[0] = strlen(str[i].a);
            str[i].b[1] = str[i].a[0];
        }
        else if (str[i].a[0] == 49){                        //1
            str[i].b[0] = '1';
            str[i].b[1] = '1';
        }
        else if (str[i].a[0] != str[i].a[1]){            //不同字符串 
            str[i].b[0] = '1';
            int j;
            for (j=1;j<=strlen(str[i].a);j++)         
                str[i].b[j] = str[i].a[j-1];
            str[i].b[j] = '1';
        }
    }
    //输出
    int i = 0,j = 0;
    while (str[i].b[0]){
        while (str[i].b[j]){
            cout <<str[i].b[j++];
        }
        i++;
        j = 0;
    }
    return 0;
}
  • 收藏

1条回答 默认 最新

  • CSDN专家-link 2021-10-14 22:58
    已采纳

    代码中吧'1'和1搞混了。表示数量的1不能是'1',表示字符的'1'不能是1。

    目前主要是因为把数量1处理成‘1’了。导致6A的6成了ASCII码,变成乱码了。

    再梳理一下代码吧。作为统计数据的数字,不能当成char输出,因为会自动当作字符输出,但实际要按照整型输出才是

    已采纳该答案
    打赏 评论

相关推荐 更多相似问题