gxpyzg 2018-11-04 07:45 采纳率: 71.4%
浏览 598
已采纳

我要被这道题逼疯了!为什么这个字符串数组有的时候不输出呢??

图片说明

这是题目要求,然后我写的代码是这样的:

#include
#include

int main() {
int number=0,sign=0;
char gifts[1000]={},friends[20]={};
char str[50]={};
int length[50]={};
int n=0,i=0;

scanf("%d",&number);

while(n<number) {
    scanf("%d%s",&sign,str);

    if(sign==1) {
        strcpy(gifts+length[i],str);
        i++;
        length[i]=strlen(str)+1;
        memset(str,0,sizeof(str));
    }

    if(sign==2) {
        strcpy(friends,str);
        printf("%s %s\n",friends,gifts+length[i-1]);
        memset(str,0,sizeof(str));

        memset(gifts+length[i-1],0,sizeof(gifts+length[i-1]));
        i--;
    }
    n++;


}

}

但是检测的时候输出的是这样的:
图片说明

这是输入要求:
图片说明

为什么啊!!我想这个问题好几天了....哭泣.....为什么有些不输出但是后面的搭配居然是对的??
而且我的str都给了50了,为什么onemillioncheck还显示不全呢??

请大神解答....暴风哭泣.....在线等!!

  • 写回答

1条回答 默认 最新

  • Italink 2018-11-04 09:01
    关注

    你的gifts和length用的很乱,并且一开始用strcpy连字符也有问题,你可以看一下监视窗口,字符排错了。
    有些混乱,做了一些修改

     #include<stdio.h>
    #include<string.h>
    int main() {
        int number = 0, sign = 0;
        char gifts[1000] = {}, friends[20] = {};
        char str[50] = {};
        int length[50] = {};
        int n = 0, i = 0;
        scanf("%d", &number);
        while (n < number) {
            scanf("%d%s", &sign, str);
            if (sign == 1) {
                strcat(gifts, str);         //  把字符串全部连到gifts里
                i++;
                length[i] = strlen(str) + 1;
                memset(str, 0, sizeof(str));
            }
            if (sign == 2) {
                strcpy(friends, str);
                printf("%s %s\n", friends, gifts +strlen(gifts) - length[i]+1);         //输出,除去最后length个长度的首地址
                memset(gifts + strlen(gifts)-length[i]+1, 0, sizeof(gifts + length[i - 1]));  //输出部分置空
                i--;
            }
            n++;
        }
        return 0;
    }
    

    题目说是栈,那么用栈来操作就 比较简单了,下面是一个简单的字符栈

     #include<stdio.h>
    #include<string.h>
    int main() {
        int number = 0, sign = 0;
        char gifts[100][100] = {};
        int top = -1;           //栈顶指针
        char str[50] ;
        int n = 0;
        scanf("%d", &number);
        while (n < number) {
            scanf("%d%s", &sign, str);
            if (sign == 1) 
                strcpy(gifts[++top], str);              //入栈
            if (sign == 2) 
                printf("%s %s\n", str, gifts[top--]);   //输出栈顶元素,出栈
            n++;
        }
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题