目前共有3篇帖子。 內容轉換:不轉換▼
 
點擊 回復
248 2
自己寫的C語言字符串複製,鏈接,比較,以及計算長度的函數,可用於單片機程序
一派護法 十九級
1樓 發表于:2015-10-29 22:02

#include <stdio.h>
#include <conio.h>

unsigned int len(char *str)
{
    unsigned int count;
    for (count = 0; *str != '\0'; str++, count++);
    return count;
}

void copy(char *dest, char* str)
{
    while (*str != '\0')
    {
        *dest = *str;
        *dest++;
        *str++;
    }
    *dest = '\0';
}

void concat(char *dest, char* str)
{
    dest += len(dest);
    copy(dest, str);
}

char equal(char *strA, char *strB)
{
    char flag = 1;
    while (*strA != '\0')
    {
        if (*strB != *strA)
        {
            flag = 0;
            break;
        }
        strA++;
        strB++;
    }
    if (flag == 1 && *strA == '\0' && *strB != '\0')
        flag = 0; // Exception: st != str1
    return flag;
}

void show_equal(char* strA, char* strB)
{
    if (equal(strA, strB))
        printf("\t\"%s\" and \"%s\" are the same.\n", strA, strB);
    else
        printf("\t\"%s\" and \"%s\" are different.\n", strA, strB);
}

void main()
{
    char str1[20] = "Hello";
    char str2[] = " World!";
    concat(str1, str2);

    printf("The length of str1 is %d.\n", len(str1));
    printf("%s\n", str1);

    printf("Now some strings will be compared:\n");
    show_equal("str1", "str1");
    show_equal("sdr1", "str1");
    show_equal("Str1", "str1");
    show_equal("str2", "str1");
    show_equal("st", "str1");
    show_equal("str1", "st");
    show_equal("", "");
    show_equal("not_empty", "");
    show_equal("", "not_empty");
    show_equal(str1, "Hello World!");
    _getch();
}
一派護法 十九級
2樓 發表于:2015-10-29 22:04

以上程序可以在Visual Studio 2012中編譯。
不過在單片機C51程序中,如果包含C語言自帶的字符串操作類,會導致輸出的hex文件大小急劇上升,有時可能還會因為hex文件太大無法燒寫到單片機芯片里。所以,可以考慮自己寫一些需要的字符串函數。
一派護法 十九級
3樓 發表于:2015-11-2 20:09

好多地方指针符号*的位置打错了。应该是char *str而不是char* str

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:248 回複數:2
評論數: ?
作者: 巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2015-11-2 20:09
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。