if(*p++!
=*q--)/*指针p、q同时向中间移动,比较对称的两个字符*/
{printf("NO\n");
break;
}
if(p>=q)
printf("YES\n");
}
19、编写程序,其中包括一个函数,此函数的功能是:
对一个长度为N的字符串从其第K个字符起,删去M个字符,组成长度为N-M的新字符串(其中N、M<=80,K<=N)。
例如输入字符串"Wearepoorstudents.",利用此函数进行删除"poor"的处理,输出处理后的字符串是"Wearestudents."。
参考答案:
strcut(s,m,k)
chars[];
intm,k;
{char*p;
inti;
p=s+m;/*指针p指向要被删除的字符*/
while((*p=*(p+k))!
='\0')/*p+k指向要前移的字符*/
p++;
}
20、编写一个函数insert(s1,s2,ch),实现在字符串s1中的指定字符ch位置处插入字符串s2。
参考答案:
insert(s1,s2,ch)
chars1[],s2[],ch;
{char*p,*q;
p=s1;
while(*p++!
=ch);
while(*s2!
='\0')
{q=p;
while(*q!
='\0')q++;
while(q>=p)
*(q+1)=*q--;
*++q=*s2++;
p++;
}
}
21、编写程序将输入的两行字符串连接后,将串中全部空格移到串首后输出。
参考答案:
strcnb(s1,s2)
chars1[],s2[];
{char*p;
inti=1;
p=s1;
while(*p!
='\0')p++;
while((*p++=*s2++)!
='\0');/*将s2接于s1后面*/
p=s1;
while(*p!
='\0')/*扫描整个字符串*/
{if(*p=='')/*当前字符是空格进行移位*/
{while(*(p+i)=='')i++;/*寻找当前字符后面的第一个非空格*/
if(*(p+i)!
='\0')
{*p=*(p+i);/*将非空格移于当前字符处*/
*(p+i)='';/*被移字符处换为空格*/
}
elsebreak;/*寻找非空格时到字符串尾,移位过程结束*/
}
p++;
}
}
22、编写程序,输入字符串,分别统计字符串中所包含的各个不同的字符及其各自字符的数量。
如:
输入字符串:
abcedabcdcd
则输出:
a=2b=2c=3d=3e=1。
参考答案:
#include"stdio.h"
structstrnum
{inti;
charch;
}
voidmain()
{charc;
inti=0,k=0;
structstrnums[100]={0,NULL};
while((c=getchar())!
='\n')
{for(i=0;s[i].i!
=0;i++)
{if(c==s[i].ch)
{s[i].i++;
break;
}
}
if(s[i].i==0)
{s[k].ch=c;
s[k++].i=1;
}
}
i=0;
while(s[i].i>0)
{printf("%c=%d",s[i].ch,s[i].i);
i++;
}
}
23、编写程序,读入磁盘上C语言源程序文件"test8.c",删去程序中的注释后显示。
参考答案:
#include"stdio.h"FILE*fp;
voidmain()
{intc,d;
if((fp=fopen("d:
\\tc\\test8.c","r"))==NULL)
exit(0);
while((c=fgetc(fp))!
=EOF)
if(c=='/')/*如果是字符注释的起始字符'/'*/
if((d=fgetc(fp))=='*')/*则判断下一个字符是否为'*'*/
in_comment();/*调用函数处理(删除)注释*/
else/*否则原样输出读入的两个字符*/
{putchar(c);
putchar(d);
}
else
if(c=='\''||c=='\"')/*判断是否是字符'或"*/echo_quote(c);/*调用函数处理字符'或"包含的字符*/elseputchar(c);}in_comment()
{intc,d;
c=fgetc(fp);
d=fgetc(fp);
while(c!
='*'||d!
='/')
{/*连续的两个字符不是*和/则继续处理注释*/
c=d;
d=fgetc(fp);
}
}
echo_quote(c)
intc;/*c中存放的是定界符'或"*/
{intd;
putchar(c);
while((d=fgetc(fp))!
=c)/*读入下一个字符判断是否是定界符c*/
{putchar(c);/*当不是定界符c时继续循环*/
if(d=='\\')/*若出现转义字符\*/
putchar(fgetc(fp));/*则下一个字符不论是何均原样输出*/
}
putchar(d);
}