求高手,解释难懂,不明白解决方案
求高手,解释难懂,不明白
#include<stdio.h>
#include<string.h>
void main()
{
char a[100][100]={' '},*p,*p1[20];
int i,j=0,l=0,k,c,ji=1,s=1;
for(j=0;j<100;j++)
for(i=0;i<100;i++)
{
scanf("%c",&a[j][i]);
if(a[j][i]=='0')
l++;
if(l==3)
{k=j; j=100;break;}
if(a[j][i]==' ')
break;
}
for(i=0;i<k;i++)
{
p1[i]=a[i];
}
for(j=0;j<k;j++)
{ for(i=j+1;i<k;i++)
{
if(strcmp(p1[j],p1[i])==0)
ji++; }
for(c=0;c<j;c++)
{ if(strcmp(p1[c],p1[j])==0)
s=0;}
if(s)
printf("%s %d \n",p1[j],ji);ji=1;
}
}
帮我一步步解释,一下,这程序很难懂;
------解决方案--------------------
#include<stdio.h>
#include<string.h>
void main()
{
char a[100][100]={' '},*p,*p1[20];
int i,j=0,l=0,k,c,ji=1,s=1;
for(j=0;j<100;j++)
for(i=0;i<100;i++)
{
scanf("%c",&a[j][i]);
if(a[j][i]=='0')
l++;
if(l==3)
{k=j; j=100;break;}
if(a[j][i]==' ')
break;
}
for(i=0;i<k;i++)
{
p1[i]=a[i];
}
for(j=0;j<k;j++)
{ for(i=j+1;i<k;i++)
{
if(strcmp(p1[j],p1[i])==0)
ji++; }
for(c=0;c<j;c++)
{ if(strcmp(p1[c],p1[j])==0)
s=0;}
if(s)
printf("%s %d \n",p1[j],ji);ji=1;
}
}
帮我一步步解释,一下,这程序很难懂;
------解决方案--------------------
- C/C++ code
#include<stdio.h> #include<string.h> void main() { char a[100][100]={' '},*p,*p1[20]; int i,j=0,l=0,k,c,ji=1,s=1; for(j=0;j<100;j++) for(i=0;i<100;i++) { scanf("%c",&a[j][i]); // 循环输入1万个字符......这丫的折腾人,存心的 if(a[j][i]=='0') // 要是输入了'0'字符就让l增量。 l++; if(l==3) // 碰到3个0就退出循环,不干了。话说是人大概都不想干了。 {k=j; j=100;break;} // 退出前先把j的值记录在k里。 if(a[j][i]==' ') // 要是输入了空格,就退出内层循环。 break; } // 整个来看,是想要人输入100组字符,每组都以空格结束。有个严重问题是字符串都没给填结束符的...... for(i=0;i<k;i++) // k里面一定有值吗?很怀疑啊。万一来个哥们就是认认真真地输入完100组字符,那个k不就是没有初值了吗? { p1[i]=a[i]; // 呃,要把你输入的内容给倒到p1里,让它指向你输入的字符串们。可是p1才20位置啊!碰到上面说那个哥们儿咋办尼? } for(j=0;j<k;j++) // 又一次想要利用不知道可不可以利用的k { for(i=j+1;i<k;i++) // 还来...... { if(strcmp(p1[j],p1[i])==0) // 要是p1[j]里面的字符串和p1[i]里面的相同,就让ji增量。想要找出后面有多少个和这个字符串重复的内容,我猜作者是这个意思 ji++; // 那个问题是p1[j]里面哪来的字符串?呃,也许整个数组a里就被拼成了一个字符串,还是好不容易在遥远的地方撞上了一个'\0' } for(c=0;c<j;c++) { if(strcmp(p1[c],p1[j])==0) // 要是p1[c]与p1[j]里的字符串相同,那就把s变成0。 s=0; // 这个,是为了看看前面是不是有相同的字符串吧 } if(s) // 要是没找到相同的字符串,就输出这一串,还有ji的数字——这玩意,表达的是什么尼? printf("%s %d \n",p1[j],ji); // 要是ji里面有值,唔,就是说后面还有和它相同的字符串的个数? ji=1; } } /* 真心猜不出这个程序想干啥,但多半它做不到想要做的事情 */