删除指定字符串的指定字符(C)

  • 代码一
  1. ‘\0’是字符串的结束符,任何字符串之后都会自动加上’\0’
  2. 指针是个好东西
#include<stdio.h>
int main()
{
	void cancelchar(char*a,char n);
	char a[50],n;
	printf("please input a string:");
	gets(a);
	printf("please input a seleted char:");
	n=getchar();
	cancelchar(a,n);
	puts(a); 
	return 0;
 } 
 
void cancelchar(char*a,char n)
 {
 	char*p;
 	for(p = a; *p != '\0'; p++)
 		if(*p != n)*a++ = *p;
 	*a = '\0';	
 }
  • 代码二

不使用指针,但实际上思路不变

#include<stdio.h>
#define N 50 
int main(){
	int delchar(char a[], char n);
	char a[N], n;//N决定字符串的字符上限 
	printf("please input a string:");
	gets(a);
	printf("please input a  deleted char:");
	n = getchar();
	delchar(a, n);
	return 0;
} 

int delchar(char a[], char n){
	char p[N];
	int i, j = 0;
	for(i = 0; a[i] != '\0'; i++){
		if(a[i] != n){
			p[j] = a[i];
			j++;
		}	
	} 
	p[j] = '\0';
	printf("new string: ");
	printf("%s", p);
}

补充几个相通的题型:
虽然一个是字符串,一个是数组
一个是删除操作,一个插入操作
但实际上,操作他们的原理是差不多的(你细品…)

  • 递增的数组中插入一个数据,依旧递增
#include<stdio.h>
int main()
{
	int a[10];
 	int x, i;
 	printf("please input 9个递增的数据:");
	for(i = 0; i < 9; i++) scanf("%d", &a[i]);  
	printf("please input a character:");
	scanf("%d", &x);
	for(i = 8; i >= 0; i--){
		if(a[i] > x) a[i+1] = a[i];
		else{
			a[i+1] = x;
			break;
		} 
	}
	for(i = 0; i < 10; i++) printf("%-8d", a[i]);
	return 0;
 } 
  • 在已排序好的数据中插入数值,顺序结构不变
#include<stdio.h>
int main()
{
	float a[100], //有序数列 
		  x;//待插入数据 
	int i = 0,//数组下标 
		t = 0;//t代表输入数据的量
	printf("\nplease input a sorted array(输入0的时候结束):");
	scanf("%f", &a[0]);
	while(a[i] != 0){
		i++;
		t++;
		scanf("%f", &a[i]);
	}  
	a[i] = 0;
	
	printf("\nplease input a number:");
	scanf("%f", &x);
	if(a[0] < a[1]){//升序 
		for(i = t-1; (a[i] > x) && i >= 0; i--){
			a[i+1] = a[i];
		}	
		a[i+1] = x;
	}
	else{//降序 
		for(i = t-1; (a[i] < x) && i >= 0; i--) a[i+1] = a[i];
		a[i+1] = x;		
	}
	//printf("%d%d", i, t);
 	printf("\nnew sorted array:");
 	for(i = 0; i <= t; i++) printf("%.2f ", a[i]);
 	return 0; 
}
发布了150 篇原创文章 · 获赞 267 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/Zhangguohao666/article/details/88969720