我在C++中有一个带有Boost的正则表达式,它匹配多行字符串中的行.正则表达式搜索找到第一个匹配,但我对匹配的最后一行感兴趣.
我现在使用的代码是这样的:
matched = boost::regex_search(input, results, regex);
if (!matched) {
return -1; // error code
}
matched_string = results["Group"];
Run Code Online (Sandbox Code Playgroud)
如果regex是"(?<Group>Data.)"和input是"Data1 Data2 Data3",然后matched_string是现在"Data1".我想要它"Data3".
我有一个小功能(在DLL中),看起来像这样:
int my_function(const char* const s)
{
try {
return my_object->do_something_with(s);
} catch (exception& e) {
return ERROR_CODE;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为try-catch块可以防止内部可能发生的任何事情my_object传播到外部.不幸的是,我错了,我调用此函数的程序(来自VB)刚停止工作,因为我传递了一个空指针参数.
那么,为什么我的try-catch块不能像(I)那样工作呢?有解决方法吗?我以前在Java中编程很多,我认为它会在那里工作......
我正在运行 Windows 7 的意大利语版本。某些文件夹(例如 )
在我从目录中运行并执行 an时C:\Users显示。但是,当我使用 Windows 资源管理器时,此Users
文件夹显示为Utenti。此外,当安装脚本安装到 C:\Users 并且我转到 Windows 资源管理器时,我可以单击
并仍然查看内容。C:\UserscmdlsC:C:\Utenti
任何人都可以解释此翻译的配置位置以及它如何在更深层次上工作,因为系统上的大多数文件夹似乎最终在 Window 7 的意大利语版本中都有两个名称。
感谢您提供有关此类机制特性的任何指示或更深入的信息。
我经常需要将BSTR字符串转换为std::wstring.一个NULL BSTR计数为空BSTR.
我过去常常这样做:
#define CHECKNULLSTR(str) ((str) ? (str) : L"")
std::wstring wstr(CHECKNULLSTR(bstr));
Run Code Online (Sandbox Code Playgroud)
它不处理内部'\0'字符,但它还需要在字符分配足够的内存之前对字符进行计数,因此它应该很慢.我想到了这个优化,它应该处理每个案例,不会截断,也不需要计算:
std::wstring wstr(bstr, bstr + ::SysStringLen(bstr));
Run Code Online (Sandbox Code Playgroud)
为了测试这种变化的影响,我编写了以下测试人员.它表明,在大多数情况下,优化需要的时间是原来的两倍多.在Debug和Release配置中都可以观察到这种变化,我正在使用VC++ 2013.
因此我的问题是,这里发生了什么?"指针对"迭代器构造函数如何比C-String构造函数慢得多?
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <strsafe.h>
#include <iostream>
#define CHECKNULLSTR(str) ((str) ? (str) : L"")
ULONGLONG bstrAllocTest(UINT iterations = 10000)
{
ULONGLONG totallen = 0;
ULONGLONG start, stop, elapsed1, elapsed2;
BSTR bstr = ::SysAllocString( // 15 * 50 = 750 chars
L"01234567890123456789012345678901234567890123456789" // 1
L"01234567890123456789012345678901234567890123456789" // …Run Code Online (Sandbox Code Playgroud) 我有一个用 GET 参数组装 URL 的函数,它采用类型的参数名称和当前调用的String类型的参数值if not 。Any?toString()null
我希望它仅适用于可以有意义地放入 URL 中的类型(数字、字符串和布尔值),并防止人们使用任何其他对象类型调用它。
这在 Kotlin 中可能吗?
用例是,我在调用此函数时往往会忘记将单位转换为数字,并最终得到param=Angle(30,DEGREES)我真正想要的结果param=30。
我一直想知道这件事已经有一段时间了.已经有很多它们可以超载,那么为什么不到最后并允许自定义运营商呢?我认为这可能是一个很好的补充.
我被告知这会使语言难以编译.这让我想知道,C++无法真正设计为易于编译,所以它真的可以撤销吗?当然,如果你使用带有静态表和语法的LR解析器,例如
E ? T + E | T
T ? F * T | F
F ? id | '(' E ')'
Run Code Online (Sandbox Code Playgroud)
它不会起作用.在Prolog中,通常使用运算符优先级解析器AFAIK进行解析,可以轻松定义新的运算符,但语言更简单.现在,语法显然可以被重写为接受identifiers在操作符被硬编码到语法中的每个地方.
还有哪些其他解决方案和解析器方案以及其他哪些因素影响了设计决策?
我的意思是关于亚马逊的产品建议或更具体的关于Last.fm的类似频段推荐.
鉴于您可以存储用户的完整收听/购买行为(世卫组织听取了OFTEN的内容?),您如何计算哪些频段与任何给定频段相似,以及多少?
我在维基百科上发现了一些网站(关联规则学习,亲和力分析),但我想从程序员的角度得到一些信息,最好是一些伪代码或Python代码.
鉴于我有
dic = {
"Alice" : { "AC/DC" : 2, "The Raconteurs" : 3, "Mogwai" : 1 },
"Bob" : { "The XX" : 4, "Lady Gaga" : 3, "Mogwai" : 1, "The Raconteurs" : 1 }
"Charlie" : { "AC/DC" : 7, "Lady Gaga" : 7 }
}
Run Code Online (Sandbox Code Playgroud)
如果数字是播放计数,我将如何迭代这个以找到频段的相似性?
我想重新解释一个unsigned long(实际上,a DWORD)作为一个signed long.我试过了:
DWORD x;
long y = reinterpret_cast<signed long>(x);
Run Code Online (Sandbox Code Playgroud)
但是,VC++ 2010 intellisense告诉我"无效的类型转换".为什么?我如何解决它?
我有这个代码:
std::wstringstream outstream;
outstream << (prop.m_pwszOriginalVolumeName
? prop.m_pwszOriginalVolumeName
: L"null") << L";"
<< (prop.m_pwszSnapshotDeviceObject
? prop.m_pwszSnapshotDeviceObject
: L"null") << L";"
<< (prop.m_pwszOriginatingMachine
? prop.m_pwszOriginatingMachine
: L"null") << L";"
<< ... // some more strings here
Run Code Online (Sandbox Code Playgroud)
有没有办法避免代码重复,仍然有简洁的代码?
其他迭代器类型肯定没有暗示它们指向连续数据,但我想知道我是否可以将RandomAccessIterators视为指向连续数据的缓冲区 - 即它们可以转换为指向数据的指针.
这个假设是否正确?我是否可以始终安全地使用&*it并获取指针,不仅仅指向一个元素,还指向连续缓冲区,如果it是RandomAccessIterator?
c++ ×7
boost ×1
bstr ×1
data-mining ×1
generics ×1
iterator ×1
kotlin ×1
operators ×1
parsing ×1
performance ×1
python ×1
regex ×1
similarity ×1
statistics ×1
stdstring ×1
windows ×1
windows-7 ×1