指针作业题总结(二)SDUT

已知子函数和主函数如下:

#include <stdio.h>

#include <string.h>

char  *findC(char arr[],char c)

{

      

}

int main()

{

        char a[]="We have full capability confidence and resources to\

overcome the epidemic at an early date";

        int i,k;

        char *p;

        char ch ;

         fflush(stdin);

        while( (ch = getchar())!=EOF)

        {

            p = findC(a,ch);

            if(p!=NULL)

                printf(" '%c' appears first in: a[%d]\n",ch,p-a);

            else

                printf(" Letter '%c' not found\n",ch);

             fflush(stdin);

        }

        return 0;

}

作业要求:

1.完成子函数的书写,子函数功能是寻找字符串中char arr[] 中字母c首次出现的位置,并以指针形式返回,如果不能找到字母c,则返回NULL;
在这里插入图片描述

我的问题:
1.
在这里插入图片描述
这里的 p-a 一开始我没理解为什么可以当做数组的下标。
因为p是字符型指针变量,子函数返回值赋给了p,p则是一个字母最先出现的位置,指的是一个地址,而a是首地址,p-a就是下标的数了。
在这里插入图片描述
在这里插入图片描述
2. 我写的子函数如下,

char  *findC(char arr[],char c)
{
    int j=strlen(arr);
    int flag;
    char* p;
    for(p=arr;p<arr+j;p++)
    {
        if(*p==c)
        {
            flag=1;
            break;
        }
        else flag=0;
    }
    if(flag==1)
        return p;
    else
    {
        p=NULL;
        return p;
    }
}

老师整理的不同思路的答案如下:

//整理的同学们的程序解答,希望同学们看看我给你的评语,
//结合这些程序设计。了解别人的思路,多学习
char *findC(char arr[],char c)
 {
       int i=0;
       while(arr[i] != '\0' )
       {
           if(arr[i]== c)
            return arr+i;
            i++;
       }
       return NULL;
 }


int main()
{
  char a[]="We have full capability confidence and resources to\
overcome the epidemic at an early date";
  int i,k;
  char *p;
 char ch ;
 fflush(stdin);
 while( (ch = getchar())!=EOF)
 {
       p = findC(a,ch);
            if(p!=NULL)
                printf(" '%c' appears first in: a[%d]\n",ch,p-a);
            else
                printf(" Letter '%c' not found\n",ch);
             fflush(stdin);
   }

        return 0;

}
///////////////////////// 
char  *findC(char arr[],char c)
{ 
  int m=0;
  char *fi=arr;
  while(arr!=0)
  {if(*fi==c)
    {m=1;break;}
    fi++;
  }
      if(m==1) return fi;
    else return NULL;

}

///>>>>>>>>>>>>指针变量定义


char *findC(char arr[],char c)
{
    int i;
    int *f;
    for(i=0;i>=0;i++)
    {
        if(arr[i] == '\0')
        {
            f = NULL;
        return f;
        }
        if(arr[i] == c)
        {
            f=&arr[i];
            return f;
        }
    }
}
//////////////////

char *findC(char arr[],char c)
{
    char *p; p=arr;
    for(;*p!='\0';p++)
    {
        if(*p==c) 
        { 
        	return p;
        }
    }
    return NULL;
}
//////

char *findC(char arr[],char c)
{ 
  char *p;
  int i;
  p=NULL;
  for(i=0;i<strlen(arr);i++)
  {
   if(arr[i]==c)
   {
     p=&arr[i];
     break;
   }
 }
 return p;
 }

///////

char  *findC(char arr[],char c)
{
      int *p;
      p=NULL;
      int n;
      n=strlen(arr);
      int i;
      for(i=0;i<n;i++)
      {
        if(arr[i]==c)
        {
          p=&arr[i];
            break;
         }
      }
           return p;
}





////指针变量定义


char  *findC(char arr[],char c)
{
    char *p;
    int i=0;
    p=&arr[i];
    i++;
    while(*p!='\0')
    {
        if (*p==c)
            return p;
        p++;
    }
    return 0;
}
////////////////////////////

char  *findC(char arr[],char c)
{

      for(int i=0;i<strlen(arr);i++)
      {
         if(arr[i]==c)
            return (arr+i);
      }
      return NULL;

}

/////////////////////////////

char *findC(char arr[],char c)
{
    int i=0;
    do
    {
        if (arr[i] == c)
        {
            return &arr[i];
        }
        i++;
    }while(arr[i]!=0);
    return NULL;
}

大多数都很简洁,for循环后直接return NULL 即可,我用了一个整型变量flag作标记,略麻烦。下次注意。

发布了4 篇原创文章 · 获赞 0 · 访问量 58

猜你喜欢

转载自blog.csdn.net/Sanity12/article/details/105082471