幾個常見字串函式的實現
#ifndef __template_xchar
#define __template_xchar template <class xchar>
#endif
#define __xcharfunc(name) _t ## name
HRESULT wctoac(const xchar* pwc, char* pac, size_t bufsize)
{
if (pwc == 0) return E_FAIL;
size_t i = 0;
for(; *(pwc+i) != 0; i++)
{
*(pac+i) = *((char*)(pwc+i));
if (i >= bufsize) return S_OK;
}
*(pac+i) = 0;
return S_OK;
}
HRESULT actowc(const char* pac, xchar* pwc, size_t bufsize)
{
if (pac == 0) return E_FAIL;
size_t i = 0;
for(; *(pac+i) != 0; i++)
{
*(pwc+i) = *(pac+i);
if (i >= bufsize) return S_OK;
}
*(pwc+i) = 0;
return S_OK;
}
__template_xchar
xchar * __xdecl __xcharfunc(strcat)(xchar * dst, const xchar* src)
{
xchar * cp = dst;
while( *cp )
cp++; /* find end of dst */
while( *cp++ = *src++ ) ; /* Copy src to end of dst */
return( dst ); /* return dst */
}
__template_xchar
xchar * __xdecl __xcharfunc(strncpy)(
xchar * dest,
const xchar * source,
size_t count
)
{
xchar *start = dest;
while (count && (*dest++ = *source++)) /* copy string */
count--;
if (count) /* pad out with zeroes */
while (--count)
*dest++ = L'/0';
return(start);
}
__template_xchar
xchar* __xdecl __xcharfunc(strupr)(xchar* string)
{
xchar * cp;
for (cp=string; *cp; ++cp)
{
if ('a' <= *cp && *cp <= 'z')
*cp += 'A' - 'a';
}
return(string);
}
__template_xchar
int __xdecl __xcharfunc(strcmp)(
const xchar * src,
const xchar * dst
)
{
int ret = 0 ;
while( ! (ret = (int)(*src - *dst)) && *dst)
++src, ++dst;
if ( ret < 0 )
ret = -1 ;
else if ( ret > 0 )
ret = 1 ;
return( ret );
}
__template_xchar
int __xdecl __xcharfunc(strncmp)(
const xchar * first,
const xchar * last,
size_t count
)
{
if (!count)
return(0);
while (--count && *first && *first == *last)
{
first++;
last++;
}
return((int)(*first - *last));
}
__template_xchar
int __xdecl __xcharfunc(stricmp)(
const xchar * dst,
const xchar * src
)
{
xchar f,l;
do {
f = ((*dst <= 'Z') && (*dst >= 'A'))
? *dst + 'a' - 'A'
: *dst;
l = ((*src <= 'Z') && (*src >= 'A'))
? *src + 'a' - 'A'
: *src;
dst++;
src++;
} while ( (f) && (f == l) );
return (int)(f - l);
}
__template_xchar
size_t __xdecl __xcharfunc(strlen)(
const xchar * wcs
)
{
const xchar *eos = wcs;
while( *eos++ ) ;
return( (size_t)(eos - wcs - 1) );
}
__template_xchar
xchar * __xdecl __xcharfunc(strlwr)(
xchar * wsrc
)
{
xchar *p; /* traverses string for C locale conversion */
xchar *wdst = NULL; /* wide version of string in alternate case */
//int dstlen; /* len of wdst string, wide chars, with null */
for (p=wsrc; *p; p++)
{
if ( (*p >= 'A') && (*p <= 'Z') )
*p = *p - 'A' + 'a';
}
return (wsrc);
}
相關推薦
幾個常見字串函式的實現
#ifndef __template_xchar#define __template_xchar template <class xchar>#endif #define __xcharfunc(name) _t ## name HRESULT wctoac(c
幾個常見字串處理函式的實現原理
字串是一種常見的資料結構,對字串的處理又可以十分靈活,所以在實際開發,尤其是非數值處理中,字串的應用非常廣泛。雖然很多字串操作都封裝在了函式庫裡,應用程式可以直接通過呼叫庫函式來實現字串處理,然而對於開發者而言,若能瞭解其底層實現原理,對於應用程式設計而言還是大有裨益的。
C語言常見字串函式實現
/* 熟練使用C語言中提供的程式碼庫有助於我們在程式設計時極大減少工作量和一些沒有必要的bug。 想成為一個優秀的程式設計師,必須深入理解這些庫。而編寫這些庫就是最好的學習手段。 在平常的積累中,也可以自己擴充套件庫,逐步增強自身能力。 下面實現了一些工作中常用
常見幾個字串函式實現程式碼
(1)size_t strlen(const char *str); size_t strlen(const char *str) { assert(str != NULL); unsigned int cnt = 0; while(*str++) ++cnt
常見字串函式的實現
strlen(),strcpy() int my_strlen(const char *str)//字串長度 { assert(str != NULL); int len = 0; while (*str ++ !=
PHP的strtolower()和strtoupper()函式在安裝非中文系統的伺服器下可能會導致將漢字轉換為亂碼,請寫兩個替代的函式實現相容Unicode文字的字串大小寫轉換
最近看到一個比較有意思的問題,如題。 首先檢視php函式的實現原始碼,以strtolower為例,原始碼如下 c = (unsigned char *)s; e = c+len; // 遍歷s,逐個變為小寫 while (c < e) { *c
自己實現c常見字串函式
1.strlen() int my_strlen(const char *s) { int len=0; if(s==NULL) { printf("error: null pointer...\n"); len
幾種常見窗函式及其MATLAB程式實現
洩漏與窗函式頻譜的兩側旁瓣有關,對於窗函式的選用總的原則是,要從保持最大資訊和消除旁瓣的綜合效果出發來考慮問題,儘可能使窗函式頻譜中的主瓣寬度應儘量窄,以獲得較陡的過渡帶;旁瓣衰減應儘量大,以提高阻帶的衰減,但通常都不能同時滿足這兩個要求。頻譜中的如果兩側瓣的高度趨於零,而使能量相對集中在主瓣,就可以較為接
關於字串的幾個常見問題
Java程式碼 String s = new String(“abc”); String s1 = “abc”; String s2 = new String(“abc”); System.out.println(s == s1); System.ou
常見字串函式的實現過程
一、strlen()函式 求字串長度,不包括 ‘\0’ unsigned int mystrlen( char *s ) { unsigned int len=0; while(*s != '\0') { s++;
幾個常見的排序算法
排序算法 算法 pan .cn span spa nbsp 小時 重復 1.快速排序 快速排序使用的是分而治之的方法,步驟: 把數列的第一個數作為基準 走訪數組的每一個數,將小於基準的數放到基準的左邊,大於或等於的就放在右邊 將上一步得到的兩個數組進行相同的處理 不斷地
Best名品腕表:腕表走時誤差大的幾個常見原因
卡地亞 勞力士 勞力士潛航者 一比一復刻表 潛水表機械表調整時間的原則長時間的靜置,機械表的發條自然放松至表款靜止不動,此時,若要重新佩帶,就必須先重新上緊發條,之後再校準時間,一般機械表在發條最松的時候,會出現時針、分針變慢或變快的現象,所以,應該先上緊發條,以免校準時間後,沒有標準動力驅動指針,即使是
幾個常見網絡故障修復命令
修復 網絡故障 日常 幾個常見命令 1. arp -d此命令用來刪除arp,被毒化的網關。補充:arp -a查看網內ip及mac2.ipconfig /flushdns用來重新刷新dns,遇到dns劫持的時候可以試試3.ipconfig /release用來重新獲取一個dhcp服務器裏面的ip
MySQL學習筆記16分組復制的幾個常見問題以及解決辦法
創建數據庫 restart 文件 create read_only exe port nbsp slave MySQL分組復制提供的功能很強大,但是有時會出現一些問題,或者使用上存在一些限制主要包括: (1)分組復制的限制。 (a)存儲引擎只能是InnoDB。 (b)二進制
10.3.3 WebView的幾個常見功能
layout class alert 組件 creat mage ets error settitle 當前主流的開發模式是“WebView+ProgressDialog” <LinearLayout xmlns:android="http://schemas.an
java幾個常見的基礎錯誤
list != trac 其它 完整 onf 啟動 ref bst 1.String 相等 稍微有點經驗的程序員都會用equals比較而不是用 ==,但用equals就真的安全了嗎,看下面的代碼 user.getName().equals("xiaoming");
9 幾個內建函式
一、 bytes() s = "你好" bs = s.encode("UTF-8") print(bs) s1 = bs.decode("UTF-8") print(s1) bs = bytes(s, encoding="utf-8") # 把字串串編碼成UTF-8 print(b
放假寂寞,敲敲程式碼,寫了下幾個常見的排序演算法
感覺比去年剛畢業的時候還是要手順很多了 #include <stdio.h> int data[100]; int temparray[100]; void qsort( int*, int n ); void insertsort( int*, int n ); void quick
kafka中的幾個常見問題
#kafka中的幾個常見問題 V1版 1,每個topic的分割槽中有多個segment,一個分割槽會被分成相同大小資料數量不等的segment,資料的生命週期就是指的是segment的生命週期 2,資料的儲存機制: 首先是Broker接受到資料,將資料放到作業系統的快取裡,(page
python中幾個常見正則例子:
匹配手機號: 1 phone_str = "hey my name is alex, and my phone number is 13651054607, please call me if you are pretty!" 2 phone_str2 = "hey my name i