杭电acm的C语言题,不是很难,就是不懂为什么错,,一直wrong answer。。懂得来帮我看看,,谢谢了。
#include<stdio.h>#include<string.h>#include<string.h>intmain(intargc,char*argv[]){int...
#include <stdio.h>
#include<string.h>
#include<string.h>
int main(int argc, char *argv[])
{
int i,j,k,len;
char a[10000];char b[1000][10];
while(gets(a))
{
if(strlen(a)==1&&a[0]=='#')break;
j=0;k=0;
memset(b,0,sizeof(b)); //初始化
for(i=0;a[i]!='\0';i++)
{
if(a[i]>='a'&&a[i]<='z') //如果是字母
{
b[j][k++]=a[i];
}
if((a[i+1]==' '||a[i+1]=='\0')&&(a[i]>='a'&&a[i]<='z'))
{
j++;
k=0;
}
}
len=0;
for(i=0;i<j-1;i++)
{
for(k=i+1;k<j;k++)
{
if(strcmp(b[i],b[k])==0&&b[i][0]!='$')//标记作用,如果出现过了就不加了
{
len++;
b[i][0]='$';
}
}
}
printf("%d\n",j-len);
}
return 0;
} 展开
#include<string.h>
#include<string.h>
int main(int argc, char *argv[])
{
int i,j,k,len;
char a[10000];char b[1000][10];
while(gets(a))
{
if(strlen(a)==1&&a[0]=='#')break;
j=0;k=0;
memset(b,0,sizeof(b)); //初始化
for(i=0;a[i]!='\0';i++)
{
if(a[i]>='a'&&a[i]<='z') //如果是字母
{
b[j][k++]=a[i];
}
if((a[i+1]==' '||a[i+1]=='\0')&&(a[i]>='a'&&a[i]<='z'))
{
j++;
k=0;
}
}
len=0;
for(i=0;i<j-1;i++)
{
for(k=i+1;k<j;k++)
{
if(strcmp(b[i],b[k])==0&&b[i][0]!='$')//标记作用,如果出现过了就不加了
{
len++;
b[i][0]='$';
}
}
}
printf("%d\n",j-len);
}
return 0;
} 展开
2个回答
展开全部
对每组用空格split,然后trim,得到字符串数组。
然后调用排序算法。得到数组2.
然后从0-N(数组),遍历一次,i != i-1,则conut++。
至于你这个算法。错误在b[j]数组没有结束吗,就是没b[j] = '\0'。
改法1:memset(b,0,sizeof(b)) 改为: memset(b,'\0',sizeof(b));。
改法2:b[j][k] = '\0';
if(a[i]>='a'&&a[i]<='z') //如果是字母
{
b[j][k++]=a[i];
}
if((a[i+1]==' '||a[i+1]=='\0')&&(a[i]>='a'&&a[i]<='z'))
{
b[j][k] = '\0';
j++;
k=0;
}
后面的懒得看,不知有没有问题。
展开全部
#include <stdio.h>
#include<string.h>
#include<string.h>
int main(int argc, char *argv[])
{
int i,j,k,len;
char a[10000];char b[1000][10];
while(gets(a))
{
if(strlen(a)==1&&a[0]=='#')break;
j=0;k=0;
memset(b,0,sizeof(b)); //初始化
for(i=0;a[i]!='\0';i++)
{
if(a[i]>='a'&&a[i]<='z') //如果是字母
{
b[j][k++]=a[i];
}
if(a[i+1]==' '||a[i+1]=='\0')
{
j++;
k=0;
}
}
len=0;
for(i=0;i<j-1;i++)
{
for(k=i+1;k<j;k++)
{
if(strcmp(b[i],b[k])==0&&b[i][0]!='$')//标记作用,如果出现过了就不加了
{
len++;
b[i][0]='$';
}
}
}
printf("%d\n",j-len);
}
return 0;
}
你的程序单词之间只有一个空格结果正确
#include<string.h>
#include<string.h>
int main(int argc, char *argv[])
{
int i,j,k,len;
char a[10000];char b[1000][10];
while(gets(a))
{
if(strlen(a)==1&&a[0]=='#')break;
j=0;k=0;
memset(b,0,sizeof(b)); //初始化
for(i=0;a[i]!='\0';i++)
{
if(a[i]>='a'&&a[i]<='z') //如果是字母
{
b[j][k++]=a[i];
}
if(a[i+1]==' '||a[i+1]=='\0')
{
j++;
k=0;
}
}
len=0;
for(i=0;i<j-1;i++)
{
for(k=i+1;k<j;k++)
{
if(strcmp(b[i],b[k])==0&&b[i][0]!='$')//标记作用,如果出现过了就不加了
{
len++;
b[i][0]='$';
}
}
}
printf("%d\n",j-len);
}
return 0;
}
你的程序单词之间只有一个空格结果正确
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询