第08天C語言(05):字符串-常用方法1

一、概念
/*
 printf函數(shù)
    弊端 : 如果想要換行, 必須加上\n
    優(yōu)點(diǎn) : 可以自定義格式化 需要輸出的字符串,也就是 可以按照我們需要的格式輸出
 puts函數(shù)
     優(yōu)點(diǎn) : 可以自動換行
     缺點(diǎn) : 不可以自定義格式,只能原樣輸出

 scanf函數(shù)
  1.利用scanf接收字符串的注意點(diǎn)
  scanf接收字符串, 會以空格, tab, 回車作為結(jié)束符號, 也就是說利用scanf接收字符串時(shí),字符串中不能出現(xiàn)空格,tab,回車
 
 gets函數(shù)
     warning: this program uses gets(), which is unsafe.
     如果是用gets接收字符串,系統(tǒng)會提示 我們正在使用一個(gè)不安全的方法接收字符
     優(yōu)點(diǎn) : 如果利用gets接收字符串,可以在字符串輸入空格,tab
 strlen函數(shù)
    strlen的原理 : 從傳入的地址 開始 逐個(gè)取出字符串, 每取出一個(gè) 讓計(jì)算器+1, 知道遇到\0位置
    計(jì)算字符串的個(gè)數(shù)(不包含\0)
    自己寫一個(gè)strlen函數(shù)
 
     //  自定義strlen函數(shù)
     int myStrlen(char str[])
     {
            int count = 0;
        while (str[count] != '\0') {
            count++;
        }
        return count;
     }
 
 */
二、代碼
#include <stdio.h>
#include <string.h>
int myStrlen(char str[]);
int myStrlen2(char str[],int length);
int main()
{
    // 1.如何輸出字符串
    // 1.1 可以使用printf的 %s占位符來輸出
    // 弊端 : 如果想要換行, 必須加上\n
    // 優(yōu)點(diǎn) : 可以自定義格式化 需要輸出的字符串,也就是 可以按照我們需要的格式輸出
    
    char str[] = "lyh";
    printf("name = %s!!!!\n",str);
    printf("-----\n");
    
    // 1.2 可以使用puts函數(shù)輸出
    // 優(yōu)點(diǎn) : 可以自動換行
    // 缺點(diǎn) : 不可以自定義格式,只能原樣輸出
    puts(str);
    printf("-----\n");
    
    // 2.如何輸入字符串
    // 1.利用scanf接收字符串的注意點(diǎn)
    // scanf接收字符串, 會以空格, tab, 回車作為結(jié)束符號, 也就是說利用scanf接收字符串時(shí),字符串中不能出現(xiàn)空格,tab,回車
    /*
    printf("請輸入一個(gè)字符串\n");
    char buf[10];
    scanf("%s",buf);
    printf("buf = %s\n",buf);
    printf("-----\n");
    */
    
    // 2.2 利用gets接收字符串
    // warning: this program uses gets(), which is unsafe.
    // 如果是用gets接收字符串,系統(tǒng)會提示 我們正在使用一個(gè)不安全的方法接收字符
    // 優(yōu)點(diǎn) : 如果利用gets接收字符串,可以在字符串輸入空格,tab
    /*
    printf("請輸入一個(gè)字符串\n");
    char buf[5]; // lyh cool
    gets(buf);
    printf("buf = %s\n",buf);
    printf("-----\n");
    */
    
    // 3.如何計(jì)算字符串的長度
    /*
     strlen的原理 : 從傳入的地址 開始 逐個(gè)取出字符串, 每取出一個(gè) 讓計(jì)算器+1, 知道遇到\0位置
     */
    
    char content[] = "lyhss11";
//    int length = sizeof(content) / sizeof(content[0]) -1;
//    printf("length = %u\n",length);
//    size_t size = strlen(content); // 計(jì)算出來的結(jié)果不包括\0
//    int size = myStrlen(content);
//    printf("size = %i\n",count);
    int length = sizeof(content) / sizeof(content[0]);
    int size = myStrlen2(content, length);
    
    printf("size = %lu\n",size);
    for (int i = 0; i < size; i++) {
        printf("content[%i] = %c\n",i,content[i]);
    }
    
    return 0;
}

int myStrlen2(char str[],int length)
{
    // 1.定義變量 記錄取出了多少個(gè)字符
    int count = 0;
    // 2.遍歷字符串?dāng)?shù)組
    for (int i = 0 ; i < length; i++) {
        if (str[i] !='\0') {
            count++;
        }
    }
    return count;
}

//  自定義strlen函數(shù)
int myStrlen(char str[])
{
    // 1.定義變量 記錄取出了多少個(gè)字符
    int count = 0;
    // 2.遍歷字符串?dāng)?shù)組
    while (str[count] != '\0') {
        count++;
    }
    return count;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容