<分区>
我正在尝试编写一个函数,它使用给定的 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 );
^^^^^^^^^^^^
否则声明会使函数的用户感到困惑。他们会认为该函数创建了原始字符串的副本。
您应该使用函数 isalpha
和 isblank
检查,而不是使用函数 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;