c语言关于字符串的
输入数据 第一行是字符串
第二行是字符c
第三行是整数n
输出数据 最后获得的字符串
输入示例 fdhjslfajsabvgfj
f
5
输出示例 ajsabvgjdhjsl
#include<stdio.h>
#include<string.h>
main()
{
char a[80],b[80],c[80],d;
int i,p,j=0,k,n,q=0,s,m;
gets(a);
scanf("%c\n",&d);
scanf("%d\n",&n);
k=strlen(a);
for(i=0;i<k;i++)
if(a[i]!=d)
{b[j]=a[i];j++;}
b[j]='0';
k=strlen(b);
for(p=n+1;p<k;p++)
{c[q]=b[p];q++;}
for(s=0;s<n+1;s++)
{c[q]=b[s];q++;}
c[q]='0';
for(m=0;m<k;m++)
printf("%c",c[m]);
return 0;
}
我写的,什么也不输出,错误在哪里啊? 展开
这是我写的代码,你参考一下,,已经调试好了,,多多指教,,,
#include <stdio.h>
void move(char *p,int i);
void remove(char *a,char f);
int main()
{
int i;
char a[60],f;
puts("输入字符串:");
gets(a);
puts("输入要删除的字符:");
f=getchar();
remove(a,f);
puts("删除后:");
puts(a);
puts("输入需要互换的前几个数:");
scanf("%d",&i);
move(a,i);
puts("互换后:");
puts(a);
return 0;
}
void remove(char *a,char f)
{ char *b=a;
while(*b!='\0')
{
if(*b!=f) { *a=*b;a++;}
b++;
}
*a=*b;//把字符串标志写进去
}
/*void move(char *p,int i) 方法1 复杂一点但是系统的实际工作少
{
char *a=p+i,*b=a,f;
while(p!=a) //a记录开始位置 b也记录开始位置保持不变 作为循环结束条件
{
f=*a;
*a=*p;//互换 把第一个移到开始位置 把开始位置的字符作为前面字符出现
*p=f;
while(*(a+1)!='\0')//通过循环把它传到最后面 那么此时开始位置又出现新的字符 注意是*(a+1)!='\0'而不是*a!='\0'
{
f=*a;
*a=*(a+1);
*(a+1)=f;
a++;
}
a=b;//把a置初始位置
p++;//移动下一个需要移动到最后面的字符
}
}
*/
void move(char *a,int i) //方法二 简单一些 但是系统的实际工作要多一些
{
char *b=a,f;
int j=0;
for(;j<i;j++)
{
while(*(b+1)!='\0')
{
f=*b;
*b=*(b+1);
*(b+1)=f;
b++;
}
b=a;
}
}
运行结果:
#include<stdio.h>
#include<string.h>
int main()
{
char a[80],b[80],c[80],d;
int i,p,j=0,k,n,q=0,s,m;
gets(a);
scanf("%c",&d);//去掉\n
scanf("%d",&n);//去掉\n
k=strlen(a);
for(i=0;i<k;i++)
{
if(a[i]!=d)
{
b[j]=a[i];
j++;
}
}
b[j]='\0';//结束符是'\0'
k=strlen(b);
for(p=n+1;p<k;p++)
{
c[q]=b[p];
q++;
}
for(s=0;s<n+1;s++)
{
c[q]=b[s];
q++;
}
c[q]='\0';//结束符是'\0'
for(m=0;m<k;m++)
printf("%c",c[m]);
return 0;
}