C 只返回空格和字母的函数
我正在尝试编写一个函数,该函数使用给定的char字符串返回相同的字符串,但除了字母和空格外,不返回任何内容 我差一点就搞定了,但我一直坚持删除“.”、“/”等符号 这里已经运行了代码,但我只是描述了一个问题C 只返回空格和字母的函数,c,function,char,definition,c-strings,C,Function,Char,Definition,C Strings,我正在尝试编写一个函数,该函数使用给定的char字符串返回相同的字符串,但除了字母和空格外,不返回任何内容 我差一点就搞定了,但我一直坚持删除“.”、“/”等符号 这里已经运行了代码,但我只是描述了一个问题 char* zastap(const char *napis) { char* jeden = napis; char* dwa = napis; while (*jeden) { if(isdigit(*dwa)) { dwa
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 );
^^^^^^^^^^^^
否则,该声明会混淆函数的用户。他们会认为函数创建了原始字符串的副本
不应使用函数检查isdigit
,而应使用函数检查isalpha
和isblank
,如果字符满足这些函数,则将其写入结果字符串
在函数中,此循环语句
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;
}
可以在循环内的if语句中替换此语句
*p++ = *q;
对于这些声明
if ( p != q ) *p = *q;
++p;
对于初学者来说,函数的声明不正确。应该这样宣布
char * zastap( char *napis );
^^^^^^^^^^^^
否则,该声明会混淆函数的用户。他们会认为函数创建了原始字符串的副本
不应使用函数检查isdigit
,而应使用函数检查isalpha
和isblank
,如果字符满足这些函数,则将其写入结果字符串
在函数中,此循环语句
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;
}
可以在循环内的if语句中替换此语句
*p++ = *q;
对于这些声明
if ( p != q ) *p = *q;
++p;
编译器是否抱怨多字符常量?(应该)
'/0'
应该是'\0'
。这不是你的主要问题。如果你想要字母和空格,你不应该使用isalpha()
和isspace()
(或者isblank()
)吗?除了数字之外,还有其他非字母!编译器是否抱怨多字符常量?(应该)'/0'
应该是'\0'
。这不是你的主要问题。如果你想要字母和空格,你不应该使用isalpha()
和isspace()
(或者isblank()
)吗?除了数字之外,还有其他非字母!不清楚为什么代码有*q | |
因为空字符既不是字母也不是空白。不清楚为什么代码有*q | |
因为空字符既不是字母也不是空白。