【问题描述】
编写一个函数del(s),将字符串s中非字母字符删除,只保留字母字符(大小写均可)。main()函数完成从键盘输入若干个(小于10个)以回车结束的字符串(最长不超过80个字符),然后调用该函数进行删除操作,将删除后的结果打印到屏幕上。
【输入形式】
第一行输入字符串个数,其他行再输入n个字符串。
【输出形式】
在屏幕上分行输出仅有字母字符的n个字符串。
【输入样例】
2
12Ab3Cd*aAbcdEeF
&dfg9)%
【输出样例】
AbCdaAbcdEeF
dfg
【样例说明】以输入样例为例,可以先输入两行字符串,然后输出两个处理后的字符串;也可以输入1个字符串,输出一个处理后的字符串,再输入1个字符串,输出一个处理后的字符串。
解答如下
#include <stdio.h>
void del(char s[])
{
char tem[150];
int p=0;
for(int i=0;s[i]!='\0';i++)
{
if((s[i]<='z'&&s[i]>='a')||(s[i]<='Z'&&s[i]>='A'))
{
tem[p++]=s[i];
}
}
for(int i=0;i<p;i++)
{
s[i]=tem[i];
}
s[p]='\0';
}
int main()
{
int n=0;
char t[150];
scanf("%d",&n);
fflush(stdin);
while(n--)
{
gets(t);
del(t);
puts(t);
}
return 0;
}
```c
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<ctype.h>
void del(char* s)
{
int k = 0;
char str[81];
for (int i = 0; i < strlen(s); i++)
{
if (isalpha(s[i]))
{
str[k++] = s[i];
}
else
continue;
}
for (int i = 0; i < k; i++)
{
printf("%c", str[i]);
}
putchar('\n');
}
int main(void)
{
int n;
char s[81];
scanf("%d", &n);
getchar();
while (n--)
{
gets_s(s);
del(s);
}
}
```
#include <stdio.h>
#include <string.h>
void del(char s[])
{
int len = strlen(s);
int i,j,count=0;
for (i = 0; i < len-count; i++)
{
if (s[i] < 'A' || s[i]>'z' || (s[i] > 'Z' && s[i] < 'a'))
{
for (j = i; j < len-count; j++)
s[j] = s[j + 1];
count++;
i--;
}
}
s[len - count] = '\0';
}
int main()
{
char s[100]= {'\0'};
int n;
scanf_s("%d", &n);
for (int i = 0; i < n; i++)
{
getchar();
gets(s);
del(s);
puts(s);
}
return 0;
}
输入输出: