【问题标题】:Write a C program to find whether the given string is Lucky or not编写一个 C 程序来判断给定的字符串是否是 Lucky
【发布时间】:2015-04-14 03:22:46
【问题描述】:

如果字符串中字符的 ASCII 值之和为偶数,则称该字符串是幸运的。该函数接受一个指向字符串的指针并返回一个 int。
如果字符串是幸运的,则返回值为 1,否则返回值为 0。

我已尝试使用以下代码,但在执行时出现了一些错误。

#include<stdio.h>
#include<string.h>
int checklucky(char *a);
int main()
{
    int c;
    c=checklucky(char *a);

    if(c==1)
        printf("%s is lucky",a);
    else
        printf("%s is not lucky",a);

    return 0;
}

int checklucky(char *a)
{
    char name[100];
    int sum=0,len,i;
    a=name;

    printf("Enter the input string\n");
    scanf("%s",name);

    len=strlen(name);

    for(i=0;i<len;i++)
    {
        sum=sum+name[i];
    }

    if(sum%2==0)
        return (1);
    else
        return (0);
}

示例输入和输出 1:

Enter the input string
anitha
anitha is not lucky

【问题讨论】:

  • but on execution i am getting some errors。什么错误?您是否使用调试器单步执行?
  • main 中声明name 并将其传递给函数。
  • 你的问题被否决了,因为你没有提供足够的细节来说明确切的问题是什么(例如你遇到了什么错误)。即使您的问题已经得到解答,您也可以对其进行编辑以提高质量。一些以前投反对票的人可能会撤消投反对票,或者您甚至可能会吸引投反对票。如果您编辑您的问题,请在此处发表评论,以便通知其他人。见stackoverflow.com/help/how-to-ask

标签: c string function pointers


【解决方案1】:

此行不正确,不应编译

c=checklucky(char *a);

您声明checklucky 接受指向输入字符串的指针,但您实际上是在checklucky 中收集该输入字符串。将该部分移入main,然后传入字符串。

int main()
{
    int c;
    char name[100];
    scanf("%s",name);

    c=checklucky(name);

然后

int checklucky(char *a)
{
    int sum=0,len,i;

    len=strlen(a);
    // etc.  Refer to a rather than name, 
    // or change the method parameter's name to name.

【讨论】:

    【解决方案2】:

    Eric J. 已经告诉过你的错误是什么。

    您可以在 main() 中获取输入字符串并将指向它的指针传递给被调用函数。您可以通过多种方式修改代码以使其正常工作。

    下面是一种方法(它试图保持代码与原始代码相似)

     #include<stdio.h>
     #include<string.h>
     int checklucky( char *);
     int main()
     {
        int c;
        char a[100];
        printf("Input string: ");
        scanf("%s",a);
    
        c=checklucky(a);
    
        if(c==1)
            printf("%s is lucky\n",a);
        else
            printf("%s is not lucky\n",a);
    
        return 0;
    }
    
    int checklucky(char *a)
    {
        char *name;
        int sum=0,len,i;
        name=a;
    
        // printf("Enter the input string\n");
        // scanf("%s",name);
    
        len=strlen(name);
    
        for(i=0;i<len;i++)
       {
           sum=sum+name[i];
       }
    
       if(sum%2==0)
           return (1);
      else
           return (0);
    }
    

    【讨论】:

      【解决方案3】:
      #include<stdio.h>
      #include<string.h> 
      int checkLucky(char *a); 
      int main() 
      { 
      char b[100]; 
      int d; 
      printf("Enter the input string\n"); 
      gets(b); 
      d=checkLucky(b); 
      if(d==1) 
      { 
      printf("%s is lucky\n",b); 
      } 
      else 
      printf("%s is not lucky\n",b); 
      return(0); 
      } 
      int checkLucky(char *a) 
      { 
      int sum=0; 
      while(*a!='\0') 
      { 
      sum+=*a; 
      a++; 
      } 
      if(sum%2==0) 
      { 
      return(1); 
      } 
      else 
      return(0);
      }
      

      【讨论】:

      • 计算时间更短,消耗的内存空间也很低,因为使用的变量数量相对较少。
      猜你喜欢
      • 2022-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      相关资源
      最近更新 更多