1. 程式人生 > 其它 >C++和python

C++和python

技術標籤:C語言學習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為結束標誌)