读书人

求解一个分开姓和名的函数有关问题

发布时间: 2012-04-03 12:38:19 作者: rapoo

求解一个分开姓和名的函数问题
题目:通过输入姓名,比如 "michael jordan ",写个函数实现
the first name:michael
the last name:jordan
要求用函数;
void split(char MyName[])
{
int i,j=0;
char test[100],test1[100];
while(MyName[i]!= ' ')
{
test[i]=MyName[i];
i++;
}
printf( "the first name is:%s ",test);
j=i;
while(MyName[i]!= '\0 ')
{
test1[i-j]=MyName[i];
i++;
}
printf( "the last name is:%s ",test1);
}
main()
{
split(michael jordan);
split(John Doe);
}
我写了之后,发现执行第一个没有问题,执行到第二句split(a b)的时候会保留之前一句里面的内容,也就是函数里面的数组没有执行清除操作,该怎么做,谢谢!

[解决办法]
void split(char MyName[])
{
int i=0,j=0; //初值
char test[100],test1[100];
memset(test,0,sizeof(test)); //清空
memset(test1,0,sizeof(test1));
while(MyName[i]!= ' ')
{
test[i]=MyName[i];
i++;
}
printf( "the first name is:%s\n ",test);
j=i;
while(MyName[i]!= '\0 ')
{
test1[i-j]=MyName[i];
i++;
}
printf( "the last name is:%s\n ",test1);
}

int main()
{
split( "michael jordan ");
split( "John Doe ");
}
~

[解决办法]
test,test1不用清空,在循环之后加test[i] = '\0 ';test[i-j]= '\0 ';即可
[解决办法]
可以通过清空来解决问题,但是
memset(test,0,sizeof(test));
不是很准确,sizeof(test)= 4 * 100 = 400 bytes.
我们的目的是对以test 为首的100个字节赋值为0吧。
bzero(test,100);
可以满足需求

读书人网 >C语言

热点推荐