我需要编写一个C/C++函数,它可以快速检查字符串是否以~1000个预定义后缀之一结束.具体来说,字符串是主机名,我需要检查它是否属于几百个预定义的二级域之一.
这个函数将被调用很多,因此需要尽可能高效地编写.只要结果很快,任何事情就会发生.
后缀集是在编译时预先确定的,不会改变.
我想要实现一个Rabin-Karp的变体,或者编写一个工具来生成一个嵌套ifs和switch的函数,这些函数可以根据特定的后缀集进行定制.由于所讨论的应用程序是64位加速比较,我可以存储长度最多为8个字节的后缀作为常量排序数组并在其中进行二进制搜索.
还有其他合理的选择吗?
a='1234;5'
print a.index('s')
Run Code Online (Sandbox Code Playgroud)
错误是:
> "D:\Python25\pythonw.exe" "D:\zjm_code\kml\a.py"
Traceback (most recent call last):
File "D:\zjm_code\kml\a.py", line 4, in <module>
print a.index('s')
ValueError: substring not found
Run Code Online (Sandbox Code Playgroud)
谢谢
是否可以将char乘以int?
例如,我正在尝试制作一个图表,每次出现一个数字都带有*.
所以类似的东西,但这不起作用
char star = "*";
int num = 7;
cout << star * num //to output 7 stars
Run Code Online (Sandbox Code Playgroud) 好.例如,我在我的txt文件中有这一行:
1|1,12;7,19;6,4;8,19;2,2
如你所见,它有2个部分,由...分隔|.我没有问题获得两个部分,并1,12;7,19;6,4;8,19;2,2使用;分离器分离第二部分.但我确实有进一步分离的问题,,以获得每组的第一和第二个数字.
这是我目前的代码:
result = strtok(result, ";");
while(result != NULL ) {
printf("%s\n", result);
result = strtok(NULL, ";");
}
Run Code Online (Sandbox Code Playgroud)
它输出我:
1,12
7,19
6,4
8,19
2,2
太好了.但是,当我尝试"strtok"(我正在使用此方法进行拆分)时,如下所示:
result = strtok(result, ";");
while(result != NULL ) {
//printf("%s\n", result);
help = strtok(result, ",");
while(help != NULL) {
printf("<%s>", help);
help = strtok(NULL, ",");
}
result = strtok(NULL, ";");
}
Run Code Online (Sandbox Code Playgroud)
我只得到"<1>,<12>",就像这组数字中只有一组一样.我不明白其他数字在哪里.相反,输出应该是:<1>,<12>,<7>,<19>,<6>,<4>,<8>,<19>,<2>,<2>.有人可以给出一个解决方案,如何获得每组的EACH号码这组数字.也许有其他方法或我做错了:)
谢谢!
通过堆上的wchar_t*分配带有SysAllocString的新BSTR时,我是否应该在堆上释放原始的wchar_t*?
这是正确的方法吗?
wchar_t *hs = new wchar_t[20];
// load some wchar's into hs...
BSTR bs = SysAllocString(hs);
delete[] hs;
Run Code Online (Sandbox Code Playgroud)
我应该在这里调用删除以释放内存吗?或者那个记忆是由BSTR做的?
如何删除字符串中的某些字符?
例如)如果我有字符串testFile.txt.1,testFile.txt.12345我怎么能删除1和12345?
编辑:我的意思是删除并丢弃字符串的第一部分到某个字符并保持它的结束.
我试图提出以下函数将字符串截断为整个单词(如果可能,否则它应截断为字符):
function Text_Truncate($string, $limit, $more = '...')
{
$string = trim(html_entity_decode($string, ENT_QUOTES, 'UTF-8'));
if (strlen(utf8_decode($string)) > $limit)
{
$string = preg_replace('~^(.{1,' . intval($limit) . '})(?:\s.*|$)~su', '$1', $string);
if (strlen(utf8_decode($string)) > $limit)
{
$string = preg_replace('~^(.{' . intval($limit) . '}).*~su', '$1', $string);
}
$string .= $more;
}
return trim(htmlentities($string, ENT_QUOTES, 'UTF-8', true));
}
Run Code Online (Sandbox Code Playgroud)
以下是一些测试:
// Iñtërnâtiônàlizætiøn and then the quick brown fox... (49 + 3 chars)
echo dyd_Text_Truncate('Iñtërnâtiônàlizætiøn and then the quick brown fox jumped overly the lazy dog and one …Run Code Online (Sandbox Code Playgroud) 经过大量测量后,我发现了一个我想要优化的Windows服务中的热点.我们正在处理可能有多个连续空格的字符串,我们希望减少到只有一个空格.我们使用静态编译的正则表达式来执行此任务:
private static readonly Regex
regex_select_all_multiple_whitespace_chars =
new Regex(@"\s+",RegexOptions.Compiled);
Run Code Online (Sandbox Code Playgroud)
然后按如下方式使用它:
var cleanString=
regex_select_all_multiple_whitespace_chars.Replace(dirtyString.Trim(), " ");
Run Code Online (Sandbox Code Playgroud)
这条线被调用了数百万次,并且被证明是相当密集的.我试着写一些更好的东西,但我很难过.鉴于正则表达式的处理要求相当适中,肯定会有更快的速度.可以unsafe用指针速度的东西进一步处理?
编辑:
感谢对这个问题的惊人反应......最让人意想不到的!
我正在尝试选择在同一页面的不同帖子上更改的ID.所以他们被赋予了id ="show_posts_ {PostID}" - 在最终输出中,{PostID}被替换为数字.在我需要调用的函数中$('show_posts_XXXXXX')--XXXXXX是生成的ID.我已将此ID存储在名为postId的变量中.
但我似乎无法做到这一点 $("'" + "show_posts_" + postId + "'")
任何人都可以告诉我如何在选择器的末尾添加一个字符串?
在不同于Windows的平台上,您可以轻松使用char *字符串并将其视为UTF-8.
问题是在Windows上,您需要使用wchar*字符串(W)接受和发送消息.如果您将使用ANSI函数(A),则不支持Unicode.
因此,如果您想编写真正的可移植应用程序,则需要在Windows上将其编译为Unicode.
现在,为了保持代码清洁,我想看看处理字符串的推荐方法是什么,这种方法可以最大限度地减少代码中的丑陋.
字符串的类型可能需要:std::string,std::wstring,std::tstring,char *,wchat_t *,TCHAR*,CString(ATL一个).
您可能遇到的问题:
cout/cerr/cin 和他们的Unicode变种 wcout,wcerr,wcinstrcmp,wcscmp和_tcscmp._T()宏填充代码.您认为哪种方法最好?(欢迎举例)
就个人而言,我会采取一种std::tstring方法,但我想看看如何对他们必要的转换做些什么.