已知子函数和主函数如下:
#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作标记,略麻烦。下次注意。