hdu 2072老是 wa,但自己的输入似乎没问题,求大神帮我看看哪里错了。

#include<iostream>#include<cstring>usingnamespacestd;structword{char*a;word*next;};in... #include<iostream>
#include<cstring>
using namespace std;
struct word
{
char *a;
word*next;
};
int main()
{
char *b=new char[100];
char c;
while(cin>>b)
{
if(b[0]=='#')break;//结束标志
word *s,*p;
s=new word;
s->a=b;
s->next=NULL;
cin.get(c);
if(c=='\n')
{
cout<<"1"<<endl;//如果只有一个单词输入
}
else
{
while(c!='\n')//如果有多个单词输入,建立链表
{
b=new char[100];
cin>>b;
p=new word;
p->a=b;
p->next=s;
s=p;
cin.get(c);
}
word *head=s;//保存链表头地址
while(s->next)
{
word *k=s;
p=s->next;
while(p)
{
if(strcmp(p->a,s->a)==0)//如果相同,删除该链结
{
if(p->next==NULL)//如果是最后一个链结
{
k->next=NULL;
delete p;
p=NULL;
}
else
{
k->next=p->next;
delete p;
p=k->next;
}

}
else//如果不同
{
k=k->next;
p=p->next;
}

}
if(s->next!=NULL)
s=s->next;
else break;
}
s=head;
int sum=0;
while(s)//剩余链结计数,得出不同的单词数
{
sum++;
s=s->next;
}
cout<<sum<<endl;
}
}
return 0;
}
我用的是链表去解决问题,如果两个单词相同将删除其中一个链结。
展开
 我来答
porker2008
推荐于2016-05-07 · TA获得超过1.4万个赞
知道大有可为答主
回答量:7066
采纳率:62%
帮助的人:1.1亿
展开全部
#include<iostream>
#include<cstring>
using namespace std;
struct word {
char *a;
word*next;
};
int main() {
char *b = new char[100];
char c;
while (1) {
word *s, *p;
s = NULL;
do {
cin.get(c);
} while (c == ' ');
if (c != '\n') cin.unget();
while (c != '\n')//如果有多个单词输入,建立链表
{
b = new char[100];
cin >> b;
if (b[0] == '#') return 0;
p = new word;
p->a = b;
p->next = s;
s = p;
do {
cin.get(c);
} while (c == ' ');
if (c != '\n') cin.unget();
}
word *head = s;//保存链表头地址
while (s && s->next) {
word *k = s;
p = s->next;
while (p) {
if (strcmp(p->a, s->a) == 0)//如果相同,删除该链结
{
k->next = p->next;
delete p;
p = k->next;
}
else//如果不同
{
k = k->next;
p = p->next;
}

}
s = s->next;
}
s = head;
int sum = 0;
while (s)//剩余链结计数,得出不同的单词数
{
sum++;
s = s->next;
}
cout << sum << endl;
}
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式