gpt4 book ai didi

arrays - 检查字符串是否只有字母和空格

转载 作者:行者123 更新时间:2023-12-04 02:20:20 24 4
gpt4 key购买 nike

我写了这个简单的代码来检查一个字符串是否只有字母和空格

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#define N 100

int checkString(char str1[]);

void main()
{
char str1[N];

scanf("%s", str1);

printf("%d",checkString(str1));

getch();
}

int checkString(char str1[])
{
int i, x=0, p;
p=strlen(str1);
for (i = 0; i < p ; i++)
{
if ((str1[i] >= 'a' && str1[i] <= 'z') || (str1[i] >= 'A' && str1[i] <= 'Z') || (str1[i] == ' '))
{
continue;
}
else{ return 0; }
}
return 1;
}

当我输入以下内容时,这很好用:

hello asds //returns 1

hello1010 sasd // return 0

但如果我在空格后输入任何内容,它会返回 1 , 像这样 :

hello 1220  //returns 1

blabla 11sdws // returns 1

有人可以告诉我为什么吗?

最佳答案

如果使用标准 C 函数,该函数可以写得更简单和正确isalphaisblank在标题 <ctype.h> 中声明例如

#include <ctype.h>

//...

int checkString( const char s[] )
{
unsigned char c;

while ( ( c = *s ) && ( isalpha( c ) || isblank( c ) ) ) ++s;

return *s == '\0';
}

如果你想检查一个字符串是否包含空格,那么代替函数 isblank你应该使用函数 isspace .

考虑到使用语句 continue 不是一个好主意。在如此简单的循环中。最好在没有 continue 的情况下重写循环陈述。

而不是功能 scanf最好使用功能 fgets如果您想输入一个句子 该功能允许输入多个单词作为一个字符串,直到按下 Enter 键。

例如
fgets( str1, sizeof( str1 ), stdin );

考虑到该函数包括换行符。所以在输入一个字符串后,你应该删除这个字符。例如
size_t n = strlen( str1 );
if ( n != 0 && str1[n-1] == '\n' ) str1[n-1] = '\0';

关于arrays - 检查字符串是否只有字母和空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30695064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com