1. 程式人生 > >C語言基礎及指標⑥字元操作

C語言基礎及指標⑥字元操作

接續上篇C語言基礎及指標⑤動態記憶體分配

字元操作 , 是我們寫程式時 , 最常用的一種操作 , 例如:字串擷取 , 字串替換 , 字串轉整數型別等等 , 都是字元操作 , 在java中String類就是二三十個方法 , 還有StringBuffer , StringBuilder等輔助類 。 下面 ,我們就來看看C語言中字元處理的函式 。

一. 字元陣列

// 字元陣列
void charArray() {

    // 字元陣列 , 可以修改
    char c[15] = { 'y','e','s',' ','m','a','n' };
    // 字元陣列可以直接作為字串輸出
    printf("%s\n", c);

    // 修改
    c[0] = 'a';

    printf("修改字元:%s\n", c);

}

字元陣列 , 本身是一個數組 , 但是也可以作為字串格式化輸出 , 可以任意替換裡面的字元 , 和運算元組是一樣的 。

二. 字元指標

/*字元指標*/
void charPointer() {
    // 記憶體連續排列 , 不可修改
    char* s = "Never give up";

    printf("記憶體地址:%#x\n", s);

    printf("-------------------------------\n擷取字元\n");
    // 擷取字元
    s += 6;
    while (*s)
    {
        printf("%c", *s);
        s++;
    }
}

字元指標與字元陣列 , 最大的區別是一個定義了就不可以修改 , 一個可以任意修改裡面的字元 , 就和StringStringBuilder一樣 , String定義了就無法增加或修改裡面的內容 , 一個是可以增加和修改裡面的內容 。

下面就列舉幾個常用的操作:

字元函式查詢網站: 字串函式

拼接字串

/*拼接函式*/
void spliceString() {
    // 合併後儲存字元的容器
    char dest[40] = {'h','e','h','e',' '};

    char* c1 = "Never give up ";

    char* c2 = "I blive you ! ";

    // 會清除字元陣列原有的資料
    //strcpy(dest, c1);
    strcat(dest, c1);
    strcat(dest, c2);

    printf("\n拼接字串:\n%s\n", dest);

}

查詢單個字元


/*查詢單個字元*/
void searchChar() {
    char* str = "I wanna dont kiss you";
    char* p = strchr(str, 'd');
    
    if (p) {
        printf("索引位置:%d\n", p - str);
        printf("列印: ");
        str += p - str;
        while (*str)
        {
            printf("%c",*str);
            str++;
        }
        printf("\n");
    }
    else {
        printf("沒有找到\n");
    }
}

查詢字串


/*查詢字串*/
void sreachChars() {
    char* str = "落花有意流水無情";
    char* handle = "流";

    char* p = strstr(str, handle);

    if (*p) {
        printf("索引位置:%d\n", p - str);
        printf("列印: ");
        str += p - str;
        printf("%s ---- %s\n", str,p);
    }
    else {
        printf("沒找到\n");
    }
}

字元轉換

/*字元轉換int*/
void strToInt() {
    char* p = "123";
    int toInt = atoi(p);
    int res = toInt + 123;
    printf("字元轉換int數值: %d\n", res);
}

字元轉換函式定義:

/-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//
// Narrow String to Number Conversions
//
//-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
_Check_return_                    _ACRTIMP double    __cdecl atof   (_In_z_ char const* _String);
_Check_return_ _CRT_JIT_INTRINSIC _ACRTIMP int       __cdecl atoi   (_In_z_ char const* _String);
_Check_return_                    _ACRTIMP long      __cdecl atol   (_In_z_ char const* _String);
_Check_return_                    _ACRTIMP long long __cdecl atoll  (_In_z_ char const* _String);
_Check_return_                    _ACRTIMP __int64   __cdecl _atoi64(_In_z_ char const* _String);

_Check_return_ _ACRTIMP double    __cdecl _atof_l  (_In_z_ char const* _String, _In_opt_ _locale_t _Locale);
_Check_return_ _ACRTIMP int       __cdecl _atoi_l  (_In_z_ char const* _String, _In_opt_ _locale_t _Locale);
_Check_return_ _ACRTIMP long      __cdecl _atol_l  (_In_z_ char const* _String, _In_opt_ _locale_t _Locale);
_Check_return_ _ACRTIMP long long __cdecl _atoll_l (_In_z_ char const* _String, _In_opt_ _locale_t _Locale);
_Check_return_ _ACRTIMP __int64   __cdecl _atoi64_l(_In_z_ char const* _String, _In_opt_ _locale_t _Locale);

_Check_return_ _ACRTIMP int __cdecl _atoflt (_Out_ _CRT_FLOAT*  _Result, _In_z_ char const* _String);
_Check_return_ _ACRTIMP int __cdecl _atodbl (_Out_ _CRT_DOUBLE* _Result, _In_z_ char*       _String);
_

C語言中的字元操作函式也比較多 , 這裡列舉幾個常用的 , 其他的可以去字串函式網址查詢 , 都有例子 。

歡迎加入Android開發技術交流QQ群:150923287,本群可免費獲取Flutter、Gradle、RxJava、小程式、Hybrid、移動架構、NDK、React Native、效能優化等技術教程!