当前位置: 代码迷 >> C语言 >> [求助]一个数组小程序的错误
  详细解决方案

[求助]一个数组小程序的错误

热度:124   发布时间:2007-09-04 15:15:52.0
[求助]一个数组小程序的错误

#include <stdio.h>
string_cut(char string[],char a)
{ int i,j;
for(i=0;i<9;i++)
if(string[i]=='f')
{for(j=0;j<9;j++)
string[j]=string[j+1];}
}
main(){
char array[9],ch='f';
array[9]={'a','b','c','d','e','a','f','f','e'};
string_cut(array[9],'f')
printf("%s\n",array);
}
高手帮忙找下这个程序的错误~谢谢

[此贴子已经被作者于2007-9-4 15:36:17编辑过]


----------------解决方案--------------------------------------------------------

#include <stdio.h>
string_cut(char string[],char a)
{ int i,j;
for(i=0;i<9;i++)
if(string[i]==a)//这里
{for(j=0;j<9;j++)
string[j]=string[j+1];}
}
main(){
char array[9]={'a','b','c','d','e','a','f','f','e'};//数组初始化
string_cut(array,'f');//函数参数调用
printf("%s\n",array);
}

函数的功能应该是删除某一个字符,做这项工作只需要一层循环的.那就是

程序代码:

void string_cut(char string[],char a)
{ int i,count=0,flag;
for(i=0;i<9-count;i++)
{
flag=0;//设置A出现的标记
if(string[i]==a)
{
count++;//计数器
flag=1;
}
string[i]=string[i+count];//移动
if(flag)i--;//重新判断string[i]
}
string[9-count]='\0';//没有这个,输出可能有乱码.
}





----------------解决方案--------------------------------------------------------
........................
----------------解决方案--------------------------------------------------------

char array[9],ch='f';
array[9]={'a','b','c','d','e','a','f','f','e'};
首先数组初始化不能在字符或int ,float等后面。必须改为:
char array[9]={'a','b','c','d','e','a','f','f','e'},ch='f';


下面是我编的一个:
#include <stdio.h>
#include<string.h>
main()
{
char array[9]={'a','b','c','d','e','a','f','f','e'},ch='f';
int i,j;
char b[80];
j=0;

for(i=0;i<9;i++){
if(array[i]!='f'){
b[j++]=array[i];
}
}
b[j]='\0';
puts(b);
}



----------------解决方案--------------------------------------------------------
以下是引用zzxwill在2007-9-4 17:00:44的发言:

char array[9],ch='f';
array[9]={'a','b','c','d','e','a','f','f','e'};
首先数组初始化不能在字符或int ,float等后面。必须改为:
//应该是对数组的初始化只能在定义的时候完成.
char array[9]={'a','b','c','d','e','a','f','f','e'},ch='f';


下面是我编的一个:
#include <stdio.h>
#include<string.h>
main()
{
char array[9]={'a','b','c','d','e','a','f','f','e'},ch='f';
int i,j;
char b[80];
j=0;

for(i=0;i<9;i++){
if(array[i]!='f'){
b[j++]=array[i];
}
}
b[j]='\0';
puts(b);//这里多用个数组,很好,其实你还不如直接输出来的好.
}



----------------解决方案--------------------------------------------------------

2楼的版主,你的程序完全正确,不过我想提个问题:

void string_cut(char string[],char a)
{ int i,count=0,flag;
for(i=0;i<9-count;i++)
{
flag=0;//设置A出现的标记
if(string[i]==a)
{
count++;//计数器
flag=1;
}
string[i]=string[i+count];//移动
if(flag)i--;//重新判断string[i]
}
string[9-count]='\0';//没有这个,输出可能有乱码.
}
这个函数里面最后一个语句string[9-count]='\0'; 我给出的数组里面有2个‘f’,按说 你最后一个语句 应该运行2次,好像是只运行了一次吧,这是怎么回事??


----------------解决方案--------------------------------------------------------
3楼和4楼的朋友~你们的算法是对的,不过也可能是我疏忽了,我要求是编写函数来写算法的,还是谢谢你们,大家一起再接再厉
----------------解决方案--------------------------------------------------------
回复:(nuciewth)#include string_c...

谢谢版主的帮助,您的程序我运行过了,是正确的,不过我还想提个问题:
void string_cut(char string[],char a)
{ int i,count=0,flag;
for(i=0;i<9-count;i++)
{
flag=0;
if(string[i]==a)
{
count++;
flag=1;
}
string[i]=string[i+count];
if(flag)i--;
}
string[9-count]='\0';
}
您写的这个函数,最后一句 string[9-count]='\0'; 我给出的数组里有2个‘f’,按说是应该 运行2次, 但貌似是只运行了一次吧~ 这是怎么回事?? 希望解释下~谢谢


----------------解决方案--------------------------------------------------------
count在记数的时候已经把每次碰到的f记录下来,所以每次移位是移动了count位.
我采取的是"动态移位",而你的是每次总是全部移动.再去做下一步.
string[9-count]='\0';这句本来就是运行一次啊.
----------------解决方案--------------------------------------------------------
  相关解决方案