- 代码一
- ‘\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;
}