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、最后就给大家完整的看一下整体的一个代码流程。
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中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。
以上内容参考:百度百科-字符串
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);
}
不知道你是不是这个意思?