C Ch6重點整理
String 的比較使用 strcmp(a,b) 进行字符串的比较,如果a等於b 則為0;如果a不管於b則不為0
以下是較常用的 string.h 中的 function
strcpy(string1, string2)
strcat(string1,string2)
strlen(string)
strcmp(string1, string2)
C Ch7重點整理
Ref. Software engineering
C Ch8重點整理
更多的 for, while 变化应用,
C Ch9重點整理
若function没有参数(parameters)的时候,則要使用它的時候,不可这样调用:
Value = next_index();
而應為
Value=next_index(void);
这和 C 语言的标准有关。
Recursion
一個recursion程式必須有二條基本規則:
1.它必須有 endingpoint
2.它必須使問題簡單化
比如說,factorial的定義為:
fact(0) = 1
fact(n) = n * fact(n-1)
所以用 C 写就成了:
int fact(int number)
{
If(number==0)
return 1;
else
return (number *fact(number-1));
}
ex1: 練習寫一個程式,可以辨認string1是string2的開頭
* 一個string,在長度為4的array,如 A[4],要記得包括 '\0',而此'\0'包括在長度4中,所以實際只能assign 3 個 char (在A[0]~A[2],A[3]為'\0'),如果不assign '\0' , String 的長度會變得很奇怪。
* 所謂variable length array 指的是像以下這種array:
int bar=12;
char A[bar];
有些較舊的C Compiler不允許這種variable length array, 但是較新的已經可以接受了
練習寫一個function count(n,array,length) 使其可計算n在array出現的次數。
#include <stdio.h>
#include <string.h>
int begins(char string1[], char string2[]);
int main() {
char line[100];
char string1[30];
char string2[30];
printf("Please enter 2 strings: \n");
fgets(line, sizeof(line),stdin);
sscanf(line,"%s %s",&string1,&string2);
printf("%d %d \n",strlen(string1),strlen(string2));
begins(string1,string2);
return 0;
}
int begins(char string1[], char string2[])
{
int result=0;
int string1Size = strlen(string1);
char new_string2[string1Size];
printf("String1 size is %d\n", string1Size);
if(strlen(string1)>strlen(string2))
result =0;
else {
//get a copy of string2 with the size of string1
for (int i=0;i<string1Size;i++) {
new_string2[i]=string2[i];
printf("%d %c\n",i,new_string2[i]);
if(i==strlen(string1)-1)
{
printf("here\n");
new_string2[i]='\0';
}
}
int cmp_result = strcmp(string1, new_string2);
printf("%d %d\n%d\n",strlen(string1),strlen(new_string2),cmp_result);
if(cmp_result==0)
{
result=1;
printf("Yes!!!\n");
}
else
{
result=0;
printf("NO!!!\n");
}
}
return result;
}
使用while loop:
#include <stdio.h>
void count(int number, int array[]);
int main()
{
int number=3;
int array[10]={1,2,3,4,333,6,7,3,9,0};
count(number,array);
return 0;
}
void count(int number, int array[])
{
int times=0;
int i=0;
while(array[i]!='\0')
{
if(array[i]==number)
{
times++;
}
i++;
}
printf("%d\n",times);
}
使用 Recursive:
working working . . .
附记
Char Pointer vs Char array Vs String --三者比较
int main()
{
char* char_ptr;
char a[10]="Hello";
char_ptr=&a[0];
// print out the whole a[10] char array which char_ptr points to
printf("%s\n",char_ptr);
//cause program shutdown, I guess it is because format setting problem... char-> string
//printf("%s\n",(*char_ptr));
// prinit out the char in the a[0] which char_ptr points to
printf("%c\n",(*char_ptr));
// print out the char pointer's address
printf("%x\n",char_ptr);
return 0;
}
看看別人寫的多好 =_=;