最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++ 頭文件<cwchar>中常見(jiàn)函數(shù)的實(shí)現(xiàn)代碼

 更新時(shí)間:2023年12月14日 11:27:32   作者:愛(ài)讀莊子的碼農(nóng)  
本文記錄了c++ 頭文件<cwchar>中常見(jiàn)函數(shù)的實(shí)現(xiàn),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

c++ 頭文件<cwchar>中常見(jiàn)函數(shù)的實(shí)現(xiàn)!??!

廢話不多說(shuō)了,代碼說(shuō)明了一切?。。。ùa封裝于名字空間mystd中)

#pragma once 
#ifndef MYSTD_CWCHAR_H
#define MYSTD_CWCHAR_H
#include<cassert> // assert 
#include<cstddef> //std::size_t
// 在vs2012中調(diào)試通過(guò),封裝于名字空間mystd中
//文件建議命名為"cwchar.h"(與標(biāo)準(zhǔn)庫(kù)并不沖突)
#define MYSTD_BEGIN namespace mystd {
#define MYSTD_END   }
#ifdef __cplusplus
MYSTD_BEGIN
	typedef std::size_t size_type;
	typedef wchar_t char_type;
	inline size_type wcslen(const char_type* wcs)
	{
     assert(wcs != 0);
	 size_type count = 0;
	 while(*wcs++)
		 ++count;
	 return count;
	}
	inline char_type* wcscat(char_type* destination,const char_type *source)
	{
		assert(destination != 0 && source != 0);
		char_type *des = destination + mystd::wcslen(destination);
		while(*des++ = *source++);
		return destination;
	}
	inline char_type* wcsncat(char_type* destination,const char_type *source,size_type num)
	{
		assert(destination != 0 && source != 0);
		char_type *des = destination + mystd::wcslen(destination);
		while(num-- && *source)
			*des++ = *source++;
		*des = 0; 
		return destination;
	}
	inline char_type* wcscpy(char_type *destination,const char_type *source)
	{
		assert(destination != 0 && source != 0);
		char_type *des = destination;
		while(*des++ = *source++);
		return destination;
	}
	inline char_type* wcsncpy(char_type *destination,const char_type *source,size_type num)
	{
		assert(destination != 0 && source != 0);
		char_type *des = destination;
		while(num--)
			*des++ = *source++; 
		return destination; // 可能不包含null wide character 
	}
	inline int wcscmp(const char_type *wcs1,const char_type *wcs2)
	{
		assert(wcs1 != 0 && wcs2 != 0);
		while(*wcs1 && *wcs1 == *wcs2)
			++wcs1, ++wcs2;
		return *wcs1 - *wcs2;
	}
	inline int wcsncmp(const char_type *wcs1,const char_type *wcs2,size_type num)
	{
		assert(wcs1 != 0 && wcs2 != 0);
		while(num-- && *wcs1 && *wcs1 == *wcs2)
			++wcs1, ++wcs2;
		if(num == size_type(-1))  // 包含了num == 0的情況
			return 0;
		else
			return *wcs1 - *wcs2;
	}
	inline const char_type* wmemchr(const char_type* pointer,char_type val,size_type num)
	{
    	assert(pointer != 0);
		char_type *ptr = (char_type*)pointer;
	    for(size_type i = 0; i < num; ++i)
		{
			if(*ptr == val)
				break;
			++ptr;
		}
		return ptr;
	}
    inline char_type* wmemchr(char_type* pointer,char_type val,size_type num)
	{
		assert(pointer != 0);
		return (char_type*)wmemchr((const char_type*)pointer,val,num);
	}
	inline int wmemcmp(const char_type *ptr_1,const char_type *ptr_2,size_type num)
	{
		assert(ptr_1 != 0 && ptr_2 != 0);
		while(num-- && *ptr_1 == *ptr_2)
			++ptr_1, ++ptr_2;
		if(num == size_type(-1))
			return 0;
		else
			return *ptr_1 - *ptr_2;
	}
	inline char_type* wmemset(char_type *pointer,char_type val,size_type num)
	{
		assert(pointer != 0);
		char_type *ptr = pointer;
		while(num--)
			*ptr++ = val;
		return pointer;
	}
	inline char_type* wmemmove(char_type *destination,const char_type *source,size_type num)
	{
		assert(destination != 0 && source != 0); 
		if(destination == source || num == 0)
			return destination;
		char_type *des = (char_type*)destination;  
		const char_type *src = (char_type*)source;  
		if(des < src || des >= src + num)  
		{
				while(num--)
					*des++ = *src++;
				return destination;
		}
		des += num;
		src += num;
		while(num--) // 倒序復(fù)制
			*--des = *--src;
		return destination;
	}
	inline char_type* wmemcpy(char_type *destination,const char_type *source,size_type num)
	{
		assert(destination != 0 && source != 0);
		return mystd::wmemmove(destination,source,num);
	}
	inline bool w_is_inside(const char_type *wcs,char_type val) // 輔助函數(shù),內(nèi)部使用
	{
		assert(wcs != 0);
		while(*wcs)
		{
			if(*wcs == val)
				return true;
			else 
				++wcs;
		}
		return false;
	}
	inline size_type wcsspn(const char_type *wcs1,const char_type *wcs2)
	{
		assert(wcs1 != 0 && wcs2 != 0);
		size_type count = 0;
		while(*wcs1 && w_is_inside(wcs2,*wcs1))
			++count, ++wcs1;
		return count;
	}
	inline size_type wcscspn(const char_type *wcs1,const char_type *wcs2)
	{
		assert(wcs1 != 0 && wcs2 != 0);
		size_type count = 0;
		while(*wcs1 && !w_is_inside(wcs2,*wcs1))
			++count, ++wcs1;
		return count;
	}
	inline const char_type* wcsstr(const char_type *wcs1,const char_type *wcs2)
	{
		assert(wcs1 != 0 && wcs2 != 0);
		size_type len_1 = mystd::wcslen(wcs1);
		size_type len_2 = mystd::wcslen(wcs2);
		if(len_1 < len_2) 
			return 0;
		const char_type *search_last = wcs1 + (len_1 - len_2);
		while(wcs1 <= search_last)
		{
			if(mystd::wcsncmp(wcs1,wcs2,len_2) == 0)
				return wcs1;
			else
				++wcs1;
		}
		return 0;
	}
    inline char_type* wcsstr(char_type *wcs1,const char_type *wcs2)
	{
		assert(wcs1 != 0 && wcs2 != 0);
		return (char_type*)mystd::wcsstr((const char_type*)wcs1,wcs2);
	}
	inline const char_type* wcschr(const char_type *wcs,char_type val)
	{
		assert(wcs != 0);
		while(*wcs && *wcs != val)
			++wcs;
		if(*wcs)
			return wcs;
		else
			return 0;
	}
	inline char_type* wcschr(char_type *wcs,char_type val)
	{
		assert(wcs != 0);
		return (char_type*)mystd::wcschr((const char_type*)wcs,val);
	}
	inline const char_type* wcsrchr(const char_type *wcs,char_type val)
	{ // val可能為null wide character 
		assert(wcs != 0);
		size_type len = mystd::wcslen(wcs);
		const char_type *ptr = wcs + len;
		if(val == 0)
			return ptr;
		--ptr;
		while(len--)
			if(*ptr == val)
				return ptr;
			else
				--ptr;
		return 0;  //無(wú)匹配的字符
	}
	inline char_type* wcsrchr(char_type *wcs,char_type val)
	{  //val可能為null wide character 
		assert(wcs != 0);
		return (char_type*)mystd::wcsrchr((const char_type*)wcs,val); // 轉(zhuǎn)調(diào)
	}
	inline const char_type* wcspbrk(const char_type *wcs1,const char_type *wcs2)
	{
		assert(wcs1 != 0 && wcs2 != 0);
		while(*wcs1 && !w_is_inside(wcs2,*wcs1))
			++wcs1;
		if(*wcs1 == 0)
			return 0;
		else
			return wcs1;
	}
	inline char_type* wcspbrk(char_type *wcs1,const char_type *wcs2)
	{
		assert(wcs1 != 0 && wcs2 != 0);
		return (char_type*)mystd::wcspbrk((const char_type*)wcs1,wcs2);
	}
MYSTD_END // end of namespace mystd 
#endif // __cplusplus
#endif // MYSTD_CWCHAR_H

下面是一個(gè)簡(jiǎn)單的測(cè)試程序

#include<iostream>
#include"cwchar.h"
#include<cwchar>
#define STD mystd // 改為std調(diào)用標(biāo)準(zhǔn)庫(kù)版本
using std::endl;
using std::cout;
int main()
{
	wchar_t buf[100];
	STD::wmemcpy(buf,L"hello world",sizeof(buf) / sizeof(wchar_t));
	unsigned count = STD::wcslen(buf);
	for(unsigned i = 0; i < count; ++i)
		cout<<(char)buf[i];
	cout<<endl;
	system("pause");
	return 0;
}

C++ 常用數(shù)學(xué)函數(shù)詳解匯總#include<math.h>

前言

在實(shí)際應(yīng)用開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)用到一些數(shù)學(xué)計(jì)算。

本文記錄了C++程序開(kāi)發(fā)過(guò)程中常用的數(shù)學(xué)函數(shù),供參考。

一、頭文件

1.cmath

標(biāo)準(zhǔn)C++推薦使用的庫(kù)

#include <cmath>

2.math.h

C語(yǔ)言中的庫(kù),推薦使用該頭文件(使用cmath如果沒(méi)有C++對(duì)應(yīng)的庫(kù)會(huì)出錯(cuò))

#include <math.h>

二、常用函數(shù)

1.開(kāi)平方

double sqrt(double x);

2.求常數(shù)e的x次方

double exp(double x);

3.求常數(shù)x的y次方

double pow(double x, double y);

4.求對(duì)數(shù)lnx、lgx 

double log(double x);//求對(duì)數(shù)lnx
double log10(double x);//求對(duì)數(shù)lgx 

5.求x絕對(duì)值

int abs(x);//整數(shù)型
double fabs(double x);//浮點(diǎn)型

6.取整函數(shù)

double ceil(double x);//向上取整 返回的是大于或等于x的最小整數(shù)
double floor(double x);//向下取整 返回的是小于或等于x的最大整數(shù)
double fix(double x);//朝零方向取整
double round(double x);//四舍五入到最近的整數(shù)

7.產(chǎn)生隨機(jī)數(shù)

int rand(void);
int r=rand()%x+y;//生產(chǎn)一個(gè)在[y,y+x)區(qū)間內(nèi)的數(shù)

8.取整與取余

double modf (double value, double* iptr);//將參數(shù)的整數(shù)部分通過(guò)指針回傳
double fmod (double x, double y);//返回兩參數(shù)相除的余數(shù)

9.三角函數(shù)

double sin(double x);//正弦
double cos(double x);//余弦
double tan(double x);//正切

10.反三角函數(shù)

double asin(double x);//反正弦 [?π/2, π/2]
double acos(double x);//反余弦 [0, π]
double atan(double x);//反正切(主值)   [?π/2, π/2]
double atan2(double x);//反正切(整圓值) [?π, π]

11.π的表示

const double pi = acos(-1.0);

總結(jié)

以上是C++編程中常用的數(shù)學(xué)函數(shù)匯總,除此之外C++標(biāo)準(zhǔn)模板庫(kù)algorithm中包含了很多的函數(shù)方法,下次我們?cè)賲R總。

到此這篇關(guān)于c++ 頭文件&lt;cwchar&gt;中常見(jiàn)函數(shù)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)c++ 頭文件&lt;cwchar&gt;內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)文件版通訊錄的代碼分享

    C語(yǔ)言實(shí)現(xiàn)文件版通訊錄的代碼分享

    這篇文章主要為大家詳細(xì)介紹了如何利用C語(yǔ)言實(shí)現(xiàn)一個(gè)文件版通訊錄,主要運(yùn)用了結(jié)構(gòu)體,一維數(shù)組,函數(shù),分支與循環(huán)語(yǔ)句等等知識(shí),需要的可以參考一下
    2023-01-01
  • C++?AVL樹(shù)插入新節(jié)點(diǎn)后的四種調(diào)整情況梳理介紹

    C++?AVL樹(shù)插入新節(jié)點(diǎn)后的四種調(diào)整情況梳理介紹

    AVL樹(shù)是高度平衡的而二叉樹(shù),它的特點(diǎn)是AVL樹(shù)中任何節(jié)點(diǎn)的兩個(gè)子樹(shù)的高度最大差別為1,本文主要給大家介紹了C++如何實(shí)現(xiàn)AVL樹(shù),需要的朋友可以參考下
    2022-08-08
  • C++使用CRT庫(kù)檢測(cè)內(nèi)存泄漏的方法詳解

    C++使用CRT庫(kù)檢測(cè)內(nèi)存泄漏的方法詳解

    內(nèi)存泄漏是 C/C++ 應(yīng)用程序中最微妙、最難以發(fā)現(xiàn)的 bug,存泄漏是由于之前分配的內(nèi)存未能正確解除分配而導(dǎo)致的, 內(nèi)存泄漏的檢測(cè)工具有很多,CRT庫(kù),是Visual Studio 自帶的,所以我們可以開(kāi)箱即用,所以下面我們就來(lái)一起學(xué)習(xí)一下如何使用CRT庫(kù)檢測(cè)內(nèi)存泄漏
    2024-06-06
  • C中的open(),?write(),?close(),?fopen()詳解

    C中的open(),?write(),?close(),?fopen()詳解

    本文主要介紹了C語(yǔ)言中的open(),?write(),?close(),?fopen()等文件操作函數(shù),open()函數(shù)用于打開(kāi)文件,write()函數(shù)用于寫入數(shù)據(jù),close()函數(shù)用于關(guān)閉已打開(kāi)的文件描述符
    2024-10-10
  • c++ 盡量不要使用#define 而是用const、enum、inline替換。

    c++ 盡量不要使用#define 而是用const、enum、inline替換。

    為什么這么說(shuō)呢?或許很多程序員已經(jīng)習(xí)慣在文件開(kāi)始使用大量的#define語(yǔ)句
    2013-01-01
  • C語(yǔ)言題目:有多少?gòu)堊雷?-并查集

    C語(yǔ)言題目:有多少?gòu)堊雷?-并查集

    并查集是一種用于管理分組的數(shù)據(jù)結(jié)構(gòu)。它具備兩個(gè)操作:(1)查詢?cè)豠和元素b是否為同一組 (2) 將元素a和b合并為同一組,需要的朋友可以參考下
    2021-09-09
  • 帶你了解C++中vector的用法

    帶你了解C++中vector的用法

    大家好,本篇文章主要講的是帶你了解C++中vector的用法,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • C語(yǔ)言?隊(duì)列的實(shí)現(xiàn)全解析

    C語(yǔ)言?隊(duì)列的實(shí)現(xiàn)全解析

    隊(duì)列(Queue)與棧一樣,是一種線性存儲(chǔ)結(jié)構(gòu),它具有如下特點(diǎn):隊(duì)列中的數(shù)據(jù)元素遵循“先進(jìn)先出”(First?In?First?Out)的原則,簡(jiǎn)稱FIFO結(jié)構(gòu)。在隊(duì)尾添加元素,在隊(duì)頭刪除元素
    2022-04-04
  • C語(yǔ)言深入講解內(nèi)存操作問(wèn)題

    C語(yǔ)言深入講解內(nèi)存操作問(wèn)題

    程序運(yùn)行的目的是為了得到特定的結(jié)果,計(jì)算機(jī)本質(zhì)上是用于計(jì)算的,既然是用于計(jì)算,就需要參與計(jì)算的數(shù)據(jù),那這些數(shù)據(jù)就存儲(chǔ)在內(nèi)存中,計(jì)算之前參與運(yùn)算的數(shù)據(jù)以及運(yùn)算之后得到的數(shù)據(jù),都存儲(chǔ)在內(nèi)存中,所以對(duì)內(nèi)存操作的掌握就尤為重要,下面我們一起來(lái)看看
    2022-04-04
  • Qt sender()函數(shù)的具體使用

    Qt sender()函數(shù)的具體使用

    在處理信號(hào)時(shí),Qt提供了一個(gè)特殊的函數(shù)sender(),可以返回發(fā)送信號(hào)的對(duì)象指針,以實(shí)現(xiàn)更靈活的代碼邏輯,本文就來(lái)介紹一下Qt sender()函數(shù)的具體使用,感興趣的可以了解一下
    2024-01-01

最新評(píng)論

莱西市| 麻栗坡县| 邮箱| 武清区| 扎囊县| 特克斯县| 临邑县| 桦甸市| 山丹县| 松桃| 电白县| 大埔区| 宜昌市| 电白县| 当雄县| 甘泉县| 赣榆县| 益阳市| 峨山| 新民市| 龙井市| 辰溪县| 平阴县| 竹北市| 滦平县| 右玉县| 辽源市| 庆阳市| 海南省| 阿坝县| 清镇市| 云安县| 汤阴县| 肥乡县| 承德县| 安仁县| 临夏县| 湖州市| 都兰县| 汝阳县| 和田市|