1. 程式人生 > >幾個常見字串函式的實現

幾個常見字串函式的實現

#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