以下是coremail的cyt所写的实现代码:
int IString::FindInclude(const char * pscCharSet,int nBegin) const
{
if (nBegin>m_length) nBegin=m_length;
int p;
for (;*pscCharSet!='\0';pscCharSet++)
{
p=this->Find(*pscCharSet,nBegin);
if (p!=-1) return p;
}
return -1;
}
是否没优化余地了呢? 非也,我在离开coremail之后,在自己重新实现字符串类的时候在mozilla的代码中找到了同样功能的代码并移植过来了:
static char GetFindInSetFilter(const char *set)
{
// Calculate filter
char filter = ~char(0); // All bits set
while (*set)
{
filter &= ~(*set);
++set;
}
return filter;
}
int TStr::FindCharInSet( const char* aCharSet,int nBegin) const
{
if ( nBegin<0 )
nBegin = 0;
if ( *aCharSet && nBegin>length )
{
// Build filter that will be used to filter out characters with
// bits that none of the terminal chars have. This works very well
// because searches are often done for chars with only the last
// 4-6 bits set and normal ascii letters have bit 7 set. Other
// letters have even higher bits set.
// Calculate filter
char filter = GetFindInSetFilter(aCharSet);
const char* endChar = str + length;
for (char *charp = str + nBegin; charp < endChar; ++charp)
{
char currentChar = *charp;
// Check if all bits are in the required area
if (currentChar & filter)
{
// They were not. Go on with the next char.
continue;
}
// Test all chars
const char *charInSet = aCharSet;
char setChar = *charInSet;
while (setChar)
{
if (setChar == currentChar)
{
// Found it!
return charp - str; // The index of the found char
}
setChar = *(++charInSet);
}
} // end for all chars in the string
}
return -1;
}
分享到:
相关推荐
必须实现如下操作,字符串比较、求串的长度、判断串是否为空、将串置空、字符串赋值(包括两个字符串类复制,一个字符串赋值到CmyString对象)、求字符串中的一个字符或改变字符串中的一个字符(采用重载[]),完成...
入一个字符,再输入一个以回车结束的字符串(少于80个字符)在字符串中查找该字符。
输入一个字符串,分别统计出其中英文字母、空格、数字和其它字符的个数,本文给出解决方法 编写思路: 1、字符串的遍历,和列表类似,可以把字符串当做元素都是一个字符的一个字符列表,它可以和列表有公共的语法 2...
String对象的方法 方法一: indexOf() (推荐) var str = "123" console.log(str.indexOf("2") !...match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。 方法三: search()
必须实现如下操作,字符串比较、求串的长度、判断串是否为空、将串置空、字符串赋值(包括两个字符串类复制,一个字符串赋值到CmyString对象)、求字符串中的一个字符或改变字符串中的一个字符(采用重载[]),...
一个入门的,简单的小程序,用MFC写的一个查找文件指定字符串的出现总个数、行号以及频率,刚实习的培训第一个任务!!
字符串类的设计与实现,包括对字符串的各中操作
定义一个串类CMyString,建立适当的构造函数 字符串使用指针保存字符串 必须实现如下操作, 字符串比较、求串的长度、判断串是否为空、将串置空、 字符串赋值(包括两个字符串类复制,一个字符串赋值到CmyString...
在一个字符串中查找第一个子串,并输出第一个子串的下标 如:This is a test message!为字符串 ,子串为 is 则输出为2
有一个共N个字符的字符串,存放在buff的存储区中,在字符串中查找“空格”(ASCII码为20h)字符,找到则在屏幕上输出FOUND!,没有找到则输出NOT FOUND!。
java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java 字符串转16进制 16进制转字符串 将两个ASCII字符合成一个字节; java ...
string常用截取字符串方法有很多,但是配合使用以下两种,基本都能满足要求: find(string strSub, npos); ...例1:直接查找字符串中是否具有某个字符串(返回”2″) std::string strPath = E:\\
第一节、一道俩个字符串是否包含的问题 1.1、O(n*m)的轮询方法 1.2、O(mlogm)+O(nlogn)+O... 5.2、在字符串中查找子串 扩展:在一个字符串中找到第一个只出现一次的字符 5.3、字符串转换为整数 5.4、字符串拷贝
* 使用一个字符串分割另一个字符串 * * @param delimiter 边界上的分隔字符 * @param haystack 输入的字符串 * @param out 输出的字符串指针 * @return 分割成了多少个成员 */ int explode(char *delimiter, ...
串口与单片机通信, 查找字符串中的特定子串.
Delphi TMemo字符串的查找完全实现 已经完全的解决Delphi TMemo的查找对话框 和 替换对话框 功能 的所有功能 查看 GIF http://images.cnblogs.com/cnblogs_com/xe2011/524919/o_TFindDialog.gif
select f_find('Ap@2233ll@@l@@','@...select f_find('Ap@223SWEQQQ3ll@@l@@','Q') from dual---返回3,代表Q在字符串中出现了3次, select f_find('我是中国人,你是哪国人','国') from dual---返回2,代表国出现了2次
本文实例讲述了C#实现实体类与字符串互相转换的方法。分享给大家供大家参考。具体实现方法如下: using System; using System.Collections.Generic; using System.Text; namespace PackDLL.Data.ConvertData { ///...
mfc 字符串中查找特殊字符 利用特殊字符分割字符串 mfc 字符串中查找特殊字符 利用特殊字符分割字符串 mfc 字符串中查找特殊字符 利用特殊字符分割字符串 mfc 字符串中查找特殊字符 利用特殊字符分割字符串 mfc 字符...
字符串连接就是将一个字符串连接到另一个字符串的末尾,使其组合成一个新的字符串,在字符串处理函数中,strcat 函数具有字符串连接功能。下面是用C语言实现不使用是strcat 函数实现连接两个字符串的功能。 源代码:...