目前共有3篇帖子。 内容转换:不转换▼
 
点击 回复
401 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)
 

本帖信息

点击数:401 回复数:2
评论数: ?
作者:巨大八爪鱼
最后回复:巨大八爪鱼
最后回复时间:2015-11-2 20:09
 
©2010-2024 Arslanbar Ver2.0
除非另有声明,本站采用知识共享署名-相同方式共享 3.0 Unported许可协议进行许可。