2006-07-03
去除字符串末尾的“*”(不能用到strlen strcpy strcat等函数)
#include"conio.h"
#include"stdio.h"
void fun( char a[])
{}
main()
{
char a[80];
clrscr();
printf("input string:");
gets(a);
fun(a);
puts(a);
只去除句尾的*理想的办法是从句尾开始读,由于不能使用strlen函数,可能需要从头开始读并记录,下面是最基本的想法
void fun( char a[])
{
int nLen = 0;
int i=0;
while( a[nLen]!='\0')
{
nLen++;
}//这一步模拟strlen,nLen包括末尾的\0字符
for( i = nLen-1; i>0; i-- )
{//从后往前依次读,碰到第一个不为*的则将其后面一个字符赋字符串结束符
if( a[i]!='*')
{
a[i+1] = '\0';
break;
}
}
}
使用上面的实现方法需要两次遍历字符串,也可以用下...全部
只去除句尾的*理想的办法是从句尾开始读,由于不能使用strlen函数,可能需要从头开始读并记录,下面是最基本的想法
void fun( char a[])
{
int nLen = 0;
int i=0;
while( a[nLen]!='\0')
{
nLen++;
}//这一步模拟strlen,nLen包括末尾的\0字符
for( i = nLen-1; i>0; i-- )
{//从后往前依次读,碰到第一个不为*的则将其后面一个字符赋字符串结束符
if( a[i]!='*')
{
a[i+1] = '\0';
break;
}
}
}
使用上面的实现方法需要两次遍历字符串,也可以用下面的方法,多几次比较
void fun( char a[])
{
int iStar = -1;
int i = 0;
for( i=0; a[i]!='\0'; i++)
{
if( a[i] == '*' )
{
if ( iStar != -1 )
{//连续的第一*的位置索引
iStar = i;
}
}
else
{//出现了非*的字符,iStar重新计数
iStar = -1;
}
}
if ( iStar != -1 )
{
a[iStar] = '\0';
}
}
没有调试,大概就这个意思。
收起