【C语言】 编写一个函数del(s),将字符串s中非字母字符删除,只保留字母字符(大小写均可)。

【问题描述】
编写一个函数del(s),将字符串s中非字母字符删除,只保留字母字符(大小写均可)。main()函数完成从键盘输入若干个(小于10个)以回车结束的字符串(最长不超过80个字符),然后调用该函数进行删除操作,将删除后的结果打印到屏幕上。
【输入形式】
第一行输入字符串个数,其他行再输入n个字符串。
【输出形式】
在屏幕上分行输出仅有字母字符的n个字符串。
【输入样例】
2
12Ab3Cd*aAbcdEeF
&dfg9)%

【输出样例】
AbCdaAbcdEeF
dfg
【样例说明】以输入样例为例,可以先输入两行字符串,然后输出两个处理后的字符串;也可以输入1个字符串,输出一个处理后的字符串,再输入1个字符串,输出一个处理后的字符串。

解答如下

img

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

输入输出:

img