这是题目要求,然后我写的代码是这样的:
#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还显示不全呢??
请大神解答....暴风哭泣.....在线等!!
你的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;
}