C语言,利用指针编写程序:删除一个字符串中的某一个字符

如题所述

1、其实头函数每个都需要用到的就是#include <stdio.h>,因为程序里面涉及到了输出和输入字符串以及字符。#include <string.h>。

2、其次就是要定义两个相同容量的字符串储存的变量 char a[100];  char b[100];。以及整数变量 int c;  int i=0,j=0; 其中a[100]是存字符串的,b【100】是存你删除对应字符的字符串的,整数C是你想删除第几位。j ,i 是后面for循坏中要使用到的变量。

3、 printf("请输入你的字符串");  scanf("%s",a);  printf("请输入你想要删除第几位字符");  scanf("%d",&c)。

4、 for(i=0;i<strlen(a);i++)  {       if(i+1!=c)       {        b[j]=a[i];        j++;       }                  }          printf(" %s",b);        }  。

5、只要当i+1不等于c时把a【i】里面的字符赋给b【i】,那么这样当i+1=c时不把它赋给b【i】从而实现删除功能。

6、最后就给大家完整的看一下整体的一个代码流程。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-06-22

p,q是指针,*p,*q表示p,q指向的地址储存的字符。++是自增运算符,*q++=*p表示将当前p指向的地址储存的值赋值给q指向的地址,赋值完成后q++,即q指向下一位地址。

如果还没有理解的话可以用实例来分析一下,对于字符串s=“abcabc”,删除字符‘a’,简单设s起始位置为0,则s[0]='a',s[1]='b',s[2]='c',s[3]='a',s[4]='b',s[5]='c',s[6]='\0'

循环开始时,p=0,q=0,到*p='\0',即p=6时结束,p每次+1

p=0,q=0,此时*p=s[0]='a',需要删除,则不记录

p=1,q=0,此时*p=s[1]='b',不需删除,记录*q即s[0]='b',q=q+1

p=2,q=1,此时*p=s[2]='c',不需删除,记录*q即s[1]='c',q=q+1

p=3,q=2,此时*p=s[3]='a',需要删除,则不记录

字符串在存储上类似字符数组

它每一位单个元素都是能提取的,字符串的零位是它的长度,如s[0]=10,这提供给我们很多方便,例如高精度运算时每一位都能转化为数字存入数组。

通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。

设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。

以上内容参考:百度百科-字符串

本回答被网友采纳
第2个回答  2016-01-16

#include<stdio.h>
int main()
{
char s[100],*p ,*q ;
puts("输入小于100个字符:");
gets(s);
char del_x;
printf("输入要删除的字符:");
scanf("%c",&del_x);
for(p=s,q=s;*p!='\0';p++)
  if(*p!=del_x)*q++=*p;
*q=*p;
puts(s);
return 0;
}

第3个回答  推荐于2018-02-26
#include <stdio.h>

void fun(char *p,char ch)
{
char *pch;
while (*p!='\0')
{
if (*p==ch) //相同时
{
for (pch=p;*pch!='\0';pch++) //字符前移
*pch=*(pch+1);
}
p++;
}
}
void main()
{
char a[]="hello world";
char ch;
scanf("%c",&ch);
fun(a,ch);
printf("%s",a);
}
不知道你是不是这个意思?本回答被提问者和网友采纳
相似回答