今天準備開始看minigui的代碼了,事先想把C語言複習一遍,原來自我感覺非常良好的C語言,今天看了一天才發現自己基礎是如此的差,唉!!!!看來還需努力啊!!!把今天的體會記錄一下也好!
寫了四個字串操作的函數,不用庫函數寫的,不怎麼好,等待以後再改進吧!!
求字串長度函數:
long StrLength(const char* srcStr)
{
_ASSERT(srcStr != NULL);
long len = 0;
while (*(srcStr+(len++)) != '\0')
;
return len-1;
}
字串拷貝函數:
char* StrCopy(char* destStr, const char* srcStr)
{
_ASSERT(destStr != NULL && srcStr != NULL);
char* tmp = destStr;
while ((*destStr++ = *srcStr++) != '\0')
;
return tmp;
}
字串比較函數:
int StrCmp(const char* srcStr, const char* cmpStr)
{
_ASSERT(cmpStr != NULL && srcStr != NULL);
enum emSta = { LOWER = -1, EQUAL = 0; LARGER = 1;};
int sta = EQUAL;
while (*srcStr++ != '\0' || *cmpStr++ != '\0')
{
if (*srcStr != *cmpStr)
{
sta = (*srcStr > *cmpStr) ? LARGER : LOWER;
break;
}
}
if (EQUAL == sta)
{
if ( *srcStr != '\0')
sta = LARGER;
else if (*cmpStr != '\0')
sta = LOWER;
}
return sta;
}
尋找子串函數:
long SubStrPos(const char* srcStr, const char* subStr)
{
_ASSERT(subStr != NULL && srcStr != NULL);
long sLen = StrLength(srcStr);
long subLen = StrLength(subStr);
int pos = 0;
if (subLen > sLen || 0 == subLen)
return -1;
while (pos+subLen <= sLen)
{
if (srcStr[pos] == subStr[0])
{
int i;
for (i=1; i<subLen; i++)
{
if (srcStr[pos+i] != subStr[i])
break;
}
if (i == subLen)
return pos;
}
++pos;
}
return -1;
}
明天在看看資料結構的知識,現在什麼演算法都忘光了,這還是程式員嗎?@_@