c - 只返回空格和字母的函数

标签 c function char definition c-strings

<分区>

我正在尝试编写一个函数,它使用给定的 char 字符串返回相同的字符串,但除了字母和空格之外什么都没有。

我几乎搞定了,但我无法删除“.”、“/”等符号。

这里已经运行了代码,但我只是描述了问题。

char* zastap(const char *napis) {
    char* jeden = napis;
    char* dwa = napis;
    while (*jeden) {
        if(isdigit(*dwa)) {
            dwa++;
            continue; }
        *jeden++ = *dwa++;
    }
    *jeden = '/0';
    return napis;
}

哦顺便说一句,它必须以这种形式制作——我的意思是“char* zastap(const char *napis)”

如果有人能告诉我解决这个问题的正确方法,我会很高兴。我猜这是循环中非常基本的条件,但我想不通。

最佳答案

对于初学者来说,函数声明不正确。它应该声明为

char * zastap( char *napis );
               ^^^^^^^^^^^^ 

否则声明会使函数的用户感到困惑。他们会认为该函数创建了原始字符串的副本。

您应该使用函数 isalphaisblank 检查,而不是使用函数 isdigit 检查,如果字符满足这些函数,则将其写入结果字符串。

在这个循环语句的函数内

while (*jeden)

有一个无效的条件。

看来你的意思是

while (*dwa)

终止零字符是 '\0' 而不是 '/0'

这是一个演示程序

#include <stdio.h>
#include <ctype.h>

char * zastap( char *napis ) 
{
    char *p = napis, *q = napis;

    do
    {
        if ( !*q || isalpha( ( unsigned char )*q ) || isblank( ( unsigned char )*q ) )
        {
            *p++ = *q;
        }
    } while ( *q++ );

    return napis;
}

int main(void) 
{
    char napis[] = "2019Alek Lucek Kamiński2019";

    puts( napis );
    puts( zastap( napis ) );

    return 0;
}

它的输出是

2019Alek Lucek Kamiński2019
Alek Lucek Kamiski

您可以在循环内的 if 语句中替换此语句

*p++ = *q;

对于这些语句

if ( p != q ) *p = *q;
++p; 

关于c - 只返回空格和字母的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57793042/

相关文章:

c - ARM 汇编 memcpy 等价物

C# 从 C malloc 释放 IntPtr

c - 更改返回位置时出现意外结果

c++ - 与调用函数相比,goto 语句是否有效?

c - K&R - 递归下降解析器 - strcat

c# - 为什么 char '\"' 与 char '"' 相同?

c# - 无法将 List<char> 作为参数传递给 List<object>?

javascript - setInterval() 同时执行的两个函数会互相减慢

function - Powershell Out-Host -paging -or- more 来限制函数的输出

function - 在不使用类的情况下在 OCaml 中隐藏函数参数