中易网

程序解读中的疑问

答案:1  悬赏:70  
解决时间 2021-01-16 12:01
  • 提问者网友:难遇难求
  • 2021-01-15 13:30
程序解读中的疑问
最佳答案
  • 二级知识专家网友:由着我着迷
  • 2021-01-15 13:42
我在文本文件上写的,复制上来有点乱,看不清楚了。你可以把它拷贝到文本文件下面,整理一下,就会很清晰了。

void StrOL(void)
{
int i,j,k,s,m,strl; //i代表行,j代表列,k代表一次搜索中有多少个字母,s作为str[]的下标,m用于对目的串赋值,strl记录第i行字符串的长度;
char str[80]; //这是一个用来作中间变量的字符串;

for(i=0;i?? {
strl=strlen(xx[i]); //取第i行字符串的长度,赋值给strl;
??memset(str,0,80); //memset(str,0,80)初始化str的值;
?? s=k=0; //初始化S和K的值;

?? for(j=strl-1;j>=0;j--) //j定义列,该循环用倒序对第i行中的字符进行处理;
?? { if(isalpha(xx[i][j])) //isalpha()函数对第i行第j列的字符是否为字母进行判别;
k++; //如果是字母,K++。则k记录的是到目前为止找到了多少个字母。
?? else //如果不是,
{
for(m=1;m<=k;m++) //那么此时K的值记录的应该是,直到最后一次判决isalpha()为真的时候有一共经历了多少个字母。
?? str[s++]=xx[i][j+m]; //将xx[i][j+m]的值赋予str[s++],就是把这中间经历的字母全部拷贝到str,
?? k=0; //且k置0 ,以便下一次记录;
?? }
?? if(!isalpha(xx[i][j]))
?? str[s++]=' '; //如果不是字母,str[s++]被赋值为空格;
?? }

?? for(m=1;m<=k;m++) //上面这个循环是倒序处理,就是从最后往前。当第一个字符是字母的时候,上面这个循环只会作K++处理。
?? str[s++]=xx[i][j+m]; //所以,最后要补充这一个循环,把首字符串加到str[s++]里面。

?? str[s]='\0'; //C语言中,字符串末尾用'\0'表示一个字符串结束,此时str[s]就是题目想要的串。
?? strcpy(xx[i],str); //把str拷贝给xx[i],完成这一行的转换。
} //对第i行的处理结束;
} //StrOL

if(!isalpha(xx[i][j])) 和上面的那个else没有区别,可以写到一起。有可能是为了让程序更加健壮,也更加可读和便于维护才这样写。

再自己写一行字符串,把自己当作电脑运行一下这段程序更加有助于理解。您还需不需要我为您作更详细的执行描述?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息