巨大八爪鱼
武林盟主 二十一级
|
Floor 1
Posted at: 10/29/15 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(); }
|
巨大八爪鱼
武林盟主 二十一级
|
Floor 2
Posted at: 10/29/15 22:04
以上程序可以在Visual Studio 2012中編譯。 不過在單片機C51程序中,如果包含C語言自帶的字符串操作類,會導致輸出的hex文件大小急劇上升,有時可能還會因為hex文件太大無法燒寫到單片機芯片里。所以,可以考慮自己寫一些需要的字符串函數。
|
巨大八爪鱼
武林盟主 二十一级
|
Floor 3
Posted at: 11/2/15 20:09
好多地方指针符号*的位置打错了。应该是char *str而不是char* str
|