C Ch6~Ch9重點整理-String

本文整理了C语言的基础知识点,包括字符串操作函数的使用方法、函数调用规范、递归函数的设计原则及实例,并提供了字符串匹配和计数的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
}


看看別人寫的多好 =_=;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值