1.输出月份英文名(指针)
启发:明白了char这个不能指向字符常量,所以要用const char代码如下
#include
int main(void){
const char *month[]={
"January","Febuary","March","Apirl","May","June","July","August","September","October","November","December"};
int x;
scanf("%d",&x);
printf("%s",month[x-1]);
}
2.查找星期:定义一个指针数组,将下表的星期信息组织起来,输入一个字符串,在表中查找,若存在,输出该字符串在表中的序号,否则输出-1。试编写相应程序。
启发:学会了字符串的比较 #include
#include
#include
int main(void){
int i;
const char*day[7]={
"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
char date[70];
int a;
gets(date);
for (i=0;i<7;i++){
if(strcmp(date,day[i])==0) {
a=i;
break;
}
}
if(i==7) a=-1;
printf("%d",a);
return 0;
}
3、字符串的连接:输入两个字符串,输出连接后的字符串,要自定义函数,并返回s的首地址
反思:应该是要调用动态分配malloc,指针的加法
代码如下:
#include
char* strcat(char*s,char*t);
int main (void){
char* add;
char s[200],t[200];
scanf("%s%s",s,t);
add=strcat(s,t);
printf("字符串为%s,地址为%x",add,add);
}
char* strcat(char*s,char *t)
{
int i,j;
char str_result[200];
for(i=0;s[i]!='\0';i++);
for(j=0;t[j]!='\0';j++,i++)
s[i]=t[j];
s[i]='\0';
return s;}
#include
char*match(char*s,char ch1,char ch2);
int main(void){
char s[200],m,n;
char *p;
scanf("%s\n",s);
scanf("%c%c",&m,&n);
p = match(s, m, n);
return 0;
}
char*match(char*s,char ch1,char ch2){
char *p=s;
while(*p!='\0'&&*p!=ch1)
{
p++;
}
char *q=p;
if(*p==ch1&&*q==ch2)
{
printf("%c\n",ch1);
return p;
}
while(*q!='\0'&&*q!=ch2)
{
printf("%c",*q++);
if(*q==ch2)
{
printf("%c",ch2);
}
}
return p;
}
5.查找子串,要求自定义函数
#include
#include
#define MAXS 30
char *search(char *s, char *t);
int main()
{
char s[MAXS], t[MAXS], *pos;
gets(s);
gets(t);
pos = search(s, t);
if ( pos != NULL )
printf("%d\n", pos - s);//pos的地址是s[i]的地址,s的地址是s[0]的地址,两者相减自然就是返回的地址了
else
printf("-1\n");
return 0;
}
char *search(char *s, char *t){
int i,j,k=0,slen,tlen;
char *p=NULL;
slen = strlen(s);//计算长度
tlen = strlen(t);
//判断相等
for(i=0;i<slen;i++){
j=i;//从j开始
while(s[j]==t[k]){
//当第一个字符与t相同时开始计算
k++;//两个从i这个循环里开始计算
j++;
}
if(k>=tlen){
//当两个字符长度大于时
p=&s[i];//将i的地址赋给p
return p;
}
k=0;
}
return p;
}