首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过"isalpha“循环传递数组

通过"isalpha“循环传递数组
EN

Stack Overflow用户
提问于 2014-06-03 07:06:15
回答 3查看 9.7K关注 0票数 1

我已经做了很长一段时间了,现有的答案几乎没有什么帮助。我对编程很陌生,并试图编写我的程序的一个子部分,它试图检查任何给定的输入是否完全由字母组成。

为此,我的想法是通过isalpha函数传递整个数组,方法是使用循环一次传递每个字符。这个想法合乎逻辑,但我在句法上遇到了实现它的困难。我将非常感谢任何帮助!

下面是我的密码-

代码语言:javascript
复制
printf("Please type the message which needs to be encrypted: ");
string p = GetString();

for (int i = 0, n = strlen(p); i < n; i++)
{
   if(isalpha(**<what I'm putting here is creating the problem, I think>**) = true)
   {
      printf("%c", p[i]);
   }

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-03 07:13:17

您应该按照以下方式修改代码(假设您自己定义了字符串类型):

代码语言:javascript
复制
printf("Please type the message which needs to be encrypted: ");
string p = GetString();

for (int i = 0, n = strlen(p); i < n; i++)
{
   if(isalpha(p[i]) == true) // HERE IS THE ERROR, YOU HAD =, NOT ==
   {
      printf("%c", p[i]);
   }

}

操作符=用于赋值,运算符==用于比较!

那到底发生了什么?不管p[i]是什么,这项任务都是正确的。

正如昆廷所提到的:

if(isalpha(p[i]) == true)

如果像这样写的话,可能会更优雅和错误:

if(isalpha(p[i]))

下面是C中的一个示例:

代码语言:javascript
复制
/* isalpha example */
#include <stdio.h>
#include <ctype.h>

int main(void)
{
  int i = 0;
  char str[] = "C++";
  while (str[i]) // strings in C are ended with a null terminator. When we meet
  // the null terminator, while's condition will get false.
  {
    if (isalpha(str[i])) // check every character of str
       printf ("character %c is alphabetic\n",str[i]);
    else
       printf ("character %c is not alphabetic\n",str[i]);
    i++;
  }
  return 0;
}

来源

参考 of isalpha().

C没有字符串类型。

提示:下次把你的代码按原样发布!

正如Alter注意到的那样,使用它是很好的:

isalpha((unsigned char)str[i])

在你的代码中

isalpha((unsigned char)p[i])

为了安全原因

票数 6
EN

Stack Overflow用户

发布于 2014-06-03 07:12:06

您的例子是这里

例如,isalpha()的参数是字符串p的第一个字符。唯一的问题是如何访问第一个字符。通常你可以使用。也就是说,只需使用以下代码:isalpha(p[i]) (我看到您已经在printf调用中使用了[] )。

另外,isalpha(p[i]) = true是错误的条件。看起来您计划检查isalpha(p[i]) == true (可以跳过== true)。

票数 2
EN

Stack Overflow用户

发布于 2017-02-13 10:42:29

晚了,但:

其他两个答案都说省略是可取的,但不要说对于可移植性是必要的。

返回“逻辑”值的C核心语言操作符== != < <= > >= && ||使用int值1表示true,0表示false。在C99和upwithstdbool.h中,按照惯例,true为1,false为0,因此,例如if( (a < b) == true )将正确工作,尽管它是多余的,而且许多人(包括我)认为它的风格很差。测试逻辑值的语言元素,即if(c) while(c) for(;c;)&& ||的操作数和左操作数到?:的操作数,认为任何比较等于0的值都是假的,任何其他值都是真的。

ctype.h中的字符分类例程以及其他一些标准库例程(如feof(f)ferror(f) )被指定为返回非零int表示true,0( int)表示false,在许多实现中,用于true的非零值并不是(总是) 1。在这种情况下,isalpha(whatever) == true可能导致测试,比如4 == 1,即使whatever是一个字母字符也会失败。OTOH、isalpha(...) != falseisalpha(...) != 0确实可以正常工作,如果您真的想要写一些显式的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24009010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档