c++中template对字符串的处理方法

C++中的Template作用是把仅类型不同但功能相似的函数合并在一起,但是有时候template中的函数并不能满足所有的类型调用。如下所示:

template <class Kty>
inline int hash_wrap(const Kty& k)
{
return (int)k;
}

所有的数字类型使用该模板都没有问题,但是string类型却不行,因为不支持有string到int的类型转换(编译过程中)。这样我们就需要在该模板外添加一个对string类型的支持,代码如下:

template <>
inline int hash_wrap<string>(conststring & k)
{
return k.size();
}

其中template <>表明该函数是模板类型的延伸,<string>表明对原模板的string类型进行改写。

例如下面两个例子所示:

例1:

template <class Kty>
inline unsigned int get_size(const Kty&k)
{
return sizeof(Kty);
}
template <>
inline unsigned int get_size(conststring& k)
{
return k.length() + 1;
}

例2:

template <class Kty>
inline bool cmp_key(const Kty& k, constchar* dest)
{
return k == *(Kty* )dest;;
}
template <>
inline bool cmp_key(const string& k,const char* dest)
{
return strcmp(k.c_str(), dest) == 0;
}
(0)

相关推荐

  • c++ 连接两个字符串实现代码 实现类似strcat功能

    复制代码 代码如下: #include "stdafx.h" #include<iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { char s1[60]="kingbaby"; char *s2="hello"; int i=0;int j=0; while(s1[i]!='\0')i++; while((s1[i]=s2[j])!='\0'){

  • C字符串与C++中string的区别详解

    在C++中则把字符串封装成了一种数据类型string,可以直接声明变量并进行赋值等字符串操作.以下是C字符串和C++中string的区别:  C字符串 string对象(C++) 所需的头文件名称  <string>或<string.h> <string>或<string.h> 需要头文件 原因 为了使用字符串函数 为了使用string类 声明 方式 char name[20]; string name; 初始化方式 char name[20]="

  • C字符串与C++字符串的深入理解

    在C中,并没有字符串这个数据类型,而是使用字符数组来保存字符串.C字符串实际上就是一个以null('\0')字符结尾的字符数组,null字符表示字符串的结束.需要注意的是:只有以null字符结尾的字符数组才是C字符串,否则只是一般的C字符数组. C字符串定义时可以利用"="号进行初始化,但是以后不能利用"="对C字符串进行赋值.对C字符串的操作需要通过"string"文件中定义的字符串处理函数.例如://字符串的初始化char a[11] = &

  • C#中使用split分割字符串的几种方法小结

    第一种方法: 复制代码 代码如下: string s=abcdeabcdeabcde;string[] sArray=s.Split(c) ;foreach(string i in sArray)Console.WriteLine(i.ToString()); 输出下面的结果:abdeabdeabde 第二种方法: 我们看到了结果是以一个指定的字符进行的分割.使用另一种构造方法对多个字符进行分割: 复制代码 代码如下: string s=abcdeabcdeabcdestring[] sArra

  • C++ 字符串的反转五种方法实例

    复制代码 代码如下: //通过不同的方法,实现对所输入字符串的反转,可以很好地复习巩固 C++ 基础知识/*分析过程: 假设要使传递的字符串为常量const字符串,这样操作更加灵活,可直接传递字符串字面值进行反转,常见的解决方法就是,定义一个新的与传递过来字符串长度 相等的字符数组,然后进行字符串拷贝,把str字符按从左到右放置到字符数组中,然后采用循环来对字符数组中字符反转*//*第一种,采用以上思路解法,传递为const类型C风格字符指针,返回为char*类型*///直接使用字符数组赋值ch

  • C++常用字符串分割方法实例汇总

    本文实例汇总了C++常用字符串分割方法,分享给大家供大家参考.具体分析如下: 我们在编程的时候经常会碰到字符串分割的问题,这里总结下,也方便我们以后查询使用. 一.用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串. 参数说明:str为要分解的字符串,delim为分隔符字符串. 返回值:从str开头开始的一个个被分割的串.当没有被分割的串时则返回NULL. 其它:strtok函数线程不安全

  • C++中汉字字符串的截取

    1. 复制代码 代码如下: const char *str = "test测试test";while(*str){//这里只需要判断第一个字节大于0x80就行了,前提是输入的是合法的GBK字符串//原因在于,如果第一个字节大于0x80,那么它必然和后面一个字节一起组成一个汉字//所以就没有必要再去判断后面一个字节了//再强调一下,前提条件是输入合法的GBK字符串if(*str > 0x80){// 汉字,计数器++str += 2;//是汉字自然就该直接+2了}else{str+

  • C++实现判断字符串是否回文实例解析

    本文实例解析了C++判断字符串是否回文的实现过程,通过数据结构中的相关例子,回文判断中采用过滤空格字符.有效字符依次入栈等方法实现该功能. 具体实例代码如下: #include <iostream> using namespace std; #define Max_String_Len 100 #include "SqStack.h" //判断字符串是否回文 bool ispalindrome(char *in_string) { SqStack <char>

  • C++实现strcmp字符串比较的深入探讨

    strcmp的实现函数简介原型:extern int strcmp(const char *s1,const char * s2); 用法:加头文件 #include <string.h> 功能:比较字符串s1和s2.一般形式:strcmp(字符串1,字符串2)返回值: 当s1<s2时,返回值<0 当s1=s2时,返回值=0 当s1>s2时,返回值>0 即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止.如:"A

  • C++中访问字符串的三种方法总结

    1.用字符数组存放一个字符串 程序1:定义一个字符数组并初始化,然后输出其中的字符串. 复制代码 代码如下: #include<iostream>using namespace std;int main(){ char str[]="I lvoe China!"; cout<<str<<endl; return 0;} 输出结果: 复制代码 代码如下: I love China! str是字符数组名,它代表数组首元素的地址,输出str的时候,从str

  • c#中分割字符串的几种方法

    单个字符分割  string s="abcdeabcdeabcde";  string[] sArray=s.Split('c');  foreach(string i in sArray)  Console.WriteLine(i.ToString());  输出下面的结果:  ab  deab  deab  de 多个字符分割  string s="abcdeabcdeabcde  string[] sArray1=s.Split(new char[3]{'c','d',

  • C++实现将一个字符串中的字符替换成另一个字符串的方法

    本文实例讲述了C++实现将一个字符串中的字符替换成另一个字符串的方法,分享给大家供大家参考.具体方法如下: 题目要求: 原地实现字符串中的每个空格替换成"%20",例如输入"We are happy", 输出"We%20are%20happy" 被替换的字符串当然不仅仅是空格,上面只是个例子 这是道很好的题目,也是百度面试中的一道题,题目不难,但是问题得考虑全面.这里给出如下实现代码: #include <iostream> #inc

  • c++面试题字符串拷贝函数示例

    复制代码 代码如下: #include<iostream>using namespace std; //字符串拷贝函数char * sCpy(char *strDest, char *strSource){    _ASSERT((strDest != NULL) && (strSource!=NULL));    char *d = strDest;              //获取dest的当前位置    char *s = strSource;            /

随机推荐