当前位置: > shell编程 >

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

时间:2019-11-29 13:28来源:linux.it.net.cn 作者:IT
代码一

‘\0’是字符串的结束符,任何字符串之后都会自动加上’\0’

指针是个好东西

#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;
}



(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容