2021-01-03 C语言学习笔记*

2021.1.3 C语言学习笔记*

1.输出月份英文名(指针)
启发:明白了char这个不能指向字符常量,所以要用const char代码如下

#include<stdio.h>
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<string.h> strcmp(a,b)若相等为0,不等为1。代码如下

#include<stdio.h>
#include<string.h>
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 <stdio.h>
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;}
  1. 指定字符串输出: while(*p!=’\0’&&*p!=ch1) 判断字符串是否结束用’\0’总是忘记
    printf("%c",q++); 这个用来让q自增 可以起到逐步输出的作用 值得注意的是scanf("%s\n",s)这句话很精髓,不然输入就前功尽弃了
#include<stdio.h>
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 <stdio.h>
#include <string.h>
#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;
}

6.单链表结点删除 要求实现两个函数,分别将读入的数据存储为单链表、将链表中所有存储了某给定值的结点删除(以-1为结束标志)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值