字串是一種常見的資料結構,對字串的處理又能夠十分靈活,所以在實際開發,尤其是非數值處理中,字串的應用非常廣泛。儘管非常多字串操作都封裝在了函式庫裡,應用程式能夠直接通過呼叫庫函式來實現字串處理,然而對於開發人員而言,若能了解其底層實現原理,對於應用程式設計而言還是大有裨益的。
這篇文章主要介紹幾種經常使用的字串處理函式的實現原理。
一、strlen函式
strlen函式:計算字串的實際長度,不包含』\0』。
演算法:從第乙個字元開始掃瞄,直到遇見第乙個』\0』,停止掃瞄,返回字串長度。
**例如以下:
二、strcat函式int strlen(const char *str)
strcat函式:將源字串str2加入到目的字串str1的末尾,同一時候覆蓋str1末尾的』\0』,並在新的str1末尾加入』\0』,返回指向str1的指標。
演算法:掃瞄str1,直到遇見』\0』,將str2逐個字元加入到str1末尾,最後加入』\0』。
**例如以下:
char *strcat(char *str1, const char *str2)
三、strcmp函式
strcmp函式:比較str1和str2兩個字串的大小,若str1>str2,則返回正數;若str1演算法:逐個比較str1和str2的每乙個字元,若相等且未遇見』\0』,則繼續比較下乙個字元,否則,返回*str1和*str2的差值。
**例如以下:
int strcmp(const char *str1, const char *str2)
return *str1 - *str2;
}
四、strcpy函式
strcpy函式:將字串str2(包含null)拷貝到字串str1,返回指向str1的指標。
**例如以下:
char *strcpy(char *str1, const char *str2)
五、atoi函式
atoi函式:把字串轉換成整數。
演算法:首先跳過空格或製表符,再推斷符號,最後通過減去』0』轉化整數,跳過非數值,返回轉換後的整數。
**例如以下:
六、itoa函式int atoi(char *str)
return sign*sum;
}
itoa函式:將整數轉化為字串。
演算法:先推斷整數的符號,若為負,則將其轉換為正;將整數從個位到最高位依次存放在暫時陣列tmp中,假設是負整數,則再加入乙個負號;逆序將暫時陣列的各個元素放在str字元陣列中,在最後加入乙個空字元。
**例如以下:
void itoa(int num, char str)
while(num>0);
if(sign<0)
tmp[i++]='-';
tmp[i]='\0';
i--;
while(i>=0)
str[j]='\0';
}
另:替換子串問題
非常多時候會碰到要求替換字串中的子串,這時須要考慮幾個問題:
1、 溢位問題
假設題目要求在原字串中替換,這時就要考慮替換後字串的長度是否會大於設定的長度;假設能夠新建乙個字串,那麼使用者能夠自行設定大小,這樣一般不存在溢位問題。
2、 待替換子串和替換子串的長度比較,將終於影響字串的長度變化。
解法一:新建乙個字串來存放替換後的字串;
**例如以下:
#includeint main()//直接main函式實現
} printf("str1=%s\n",str1);
return 0;
}
解法二:在原字串上替換,從後往前替換空格;
**例如以下:
wednesday,july 09, 2014void replaceblank(char string, int length)
/*newlength 為把空格替換成'%20'之後的長度*/
int newlength = originallength + numberofblank * 2;
if(newlength > length)
return;
int indexoforiginal = originallength;
int indexofnew = newlength;
while(indexoforiginal >= 0 && indexofnew > indexoforiginal)
else
-- indexoforiginal;
}}
常見字串函式實現
1,strlen 計數法 unsigned int my strlen1 const char str return count 遞迴法 unsigned int my strlen2 const char str 首尾相減法 unsigned int my strlen3 const char s...
常見字串函式的原型!!!
1 strcat 將指標指向的字串放到目的字串後 cpp char strcat char strdest,const char strscr 將源字串加const,表明其為輸入引數 向該字串的結束標誌 0 while strdest strscr 是while strdest strscr 0 的...
Python常見字串方法函式
1 大小寫轉換 s.lower s.upper 前者將s字串中所有大寫字母轉為小寫,後者相反 s.title s.capitalize 前者返回s字串中所有單詞首字母大寫且其他字母小寫的格式,後者返回首字母大寫 其他字母全部小寫的新字串。s.swapcase 將s字串中所有字母做大小置換,大寫變小寫...