#1 guoshi3@2008-08-21 03:17:00
5115
回复
删除
哈,这里的c语言很少,pascal做这题没问题。我做这题也费了半天劲。我的方法是利用gets和sscanf。
输入的部分大体如下,q[]就是读出的这行的数组成的数组,nq是这行数的个数
大体思路是,扫描这个字符串,遇到空格,就读入这个空格和上个空格(记录下上个空格的位置)之间的数。读得时候先把把该字符串s考到另一个tp,并只从上个空格的位置开始考,用的是这个语句:strcpy(tp,s+p+1),p为上个空格的位置;这样做的目的是让tp的开头就是需要读取的数字。就可以用sscanf(tp,"%d",&..)来读取这个数了
呵呵,我的方法也挺麻烦,但还算做出这题了。你要是知道怎么判断行末或者有更好的方法一定告诉我,谢谢:D
for (int i=0;i<m;i++){
char s[3000],tp[3000];
int q[501],nq=0;
gets(s);
int p=-1;
for (int j=0;s[j]!=’\0’;j++)
if (s[j]==’ ’){
strcpy(tp,s+p+1);
sscanf(tp,"%d",&q[nq++]);
p=j;
}
strcpy(tp,s+p+1);
sscanf(tp,"%d",&q[nq++]);
}
#4 chengaoyuan@2008-08-21 19:55:00
5212
回复
删除
NOIP不让string??
那用c++的多不爽,来个字符串操作的就得麻烦死。
NOIP到底都不让用什么啊?
据说c++里qsort()也不让用吧。。。
我还没参加过noip呢.
#7 gezi1413@2009-10-17 09:00:00
13357
回复
删除
while(x!=’\n’ && x!=-1)
{
cin >> u ;
x=-1;
cin.get(x);
tmp[++tmp[0]]=u;
}
囧