这对我来说似乎很简单,但我实际上找不到任何明确说明这一点的麻烦.
是std::string stringArray[3] 不是会创建一个std::string对象数组SomeType typeArray[3]?实际数字无关紧要; 我随便挑了3个.
在Visual Studio 2010调试器中,它似乎创建单个字符串而不是字符串数组.为什么?
狂野猜测:它是调用默认std::string构造函数,然后调用未使用的索引3访问吗?如果是这样,为什么不在空字符串上引起越界异常呢?
这是否与重载[]运算符有关?
有很多方法可以编写相同的东西,而无需专门使用std::string没有问题的数组,但这种行为的解释/理由是什么?这对我来说似乎违反直觉.
编辑:我发现这个线程std :: string数组元素访问,其中答案的注释似乎观察到相同的行为.
同事(严肃地说,我不使用char*:))制作了一个减少到这个的bug:
testVar.append('\0'); //testVar is std::string
Run Code Online (Sandbox Code Playgroud)
所以他基本上修复了它:
testVar.append("\0");
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么第一个不合法?不能认为它是0长度0终止字符串?我尝试进入VS10 std lib实现,亲眼看看,但我后悔了.:)
不知何故,我没有找到,如何只将第一次出现或正则表达式放入字符串.我可以创建一个正则表达式对象:
static const boost::regex e("<(From )?([A-Za-z0-9_]+)>(.*?)");
Run Code Online (Sandbox Code Playgroud)
现在,我需要匹配([A-Za-z0-9_]+)到std::string,说playername.
std::string chat_input("<Darker> Hello");
std::string playername = e.some_match_method(chat_input, 1); //Get contents of the second (...)
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
什么应该代替some_match_method和应该采取什么参数?
我有一个STL代码库需要在QtQuick 2.0应用程序(图形界面)和纯粹的STL应用程序(服务器)之间共享.接口可以从共享STL代码库派生其类,因此它可以具有Q_PROPERTYs,信号,槽等,但共享数据结构需要保持仅STL.
我想避免数据重复(std::string- > QString等)所以我试图std::string在Q_PROPERTY系统内直接使用.使用Q_DECLARE_METATYPE(std::string)和qRegisterMetaType<std::string>();声明属性,如:
Q_PROPERTY(QString stldata READ stldata WRITE setSTLData NOTIFY stldataChanged)
Run Code Online (Sandbox Code Playgroud)
使我的代码编译,但QML仍然不喜欢std::strings.
用以下内容编写文本字段:
Text
{
text: myserviceinterface.stldata
}
Run Code Online (Sandbox Code Playgroud)
Unable to assign std::string to QString在附加现有QML字符串时会产生警告:
Text
{
text: "text: " + myserviceinterface.stldata
}
Run Code Online (Sandbox Code Playgroud)
使Text控制显示变得怪异QVariant(std::string).
我究竟做错了什么?
在C++中,我有一个字符串,就是这样std::string string = "1234567890".
我有一个定义为的整数向量 std::vector<int> vec
我怎么能计算vec = stoi(string.at(1) + string.at(2))它会给我一个12我可以插入到这个向量的整数?
我目前正在尝试在Linux上的2个进程之间的共享内存中放置结构.我没有问题共享bool或int但是当尝试共享字符串时,std :: string或char我有一个分段错误错误.
现在我的代码是:
#include <iostream>
#include <sys/types.h> //shmat
#include <sys/shm.h>
#include <sys/stat.h> //open
#include <fcntl.h>
#include <unistd.h> //close
using namespace std;
struct Prises{
int numero;
int transactionId;
bool reservation;
bool charge;
bool disponibilite;
bool defaut;
bool verrouillage;
bool trappe;
int LEDverte;
int LEDrouge;
std::string carte;
std::string etat;
};
int main()
{
const char *keyFile = "/tmp/key.dat";
/* Make sure the file exists. */
int descriptor = open(keyFile, O_CREAT | O_RDWR, S_IRWXU);
/* Only wanted to make sure that the …Run Code Online (Sandbox Code Playgroud) 既然std::set是作为二叉树实现的,它如何比较std::string不等式?看起来像a < b && b < a吗?
是直接使用字符串的长度还是以某种方式对其进行散列?它是否完全保证字符串的唯一性?
我想,以取代所有出现&在我std::string与&。这是代码段代码
链接
#include <algorithm>
#include <string>
#include <iostream>
int main()
{
std::string st = "hello guys how are you & so good & that &";
std::replace(st.begin(), st.end(), "&", "&");
std::cout << "str is" << st;
return 1;
}
Run Code Online (Sandbox Code Playgroud)
它显示了std :: replace无法替换字符串的错误,但仅适用于字符。 我知道我仍然有逻辑可以完成我的工作,但是有什么干净的C ++方式可以做到这一点吗?有内置功能吗?
请考虑以下代码:
struct Foo {
std::string s;
Foo(std::string s_) : s(s_) { }
};
Foo* f(std::string s)
{
return new Foo(s);
}
Run Code Online (Sandbox Code Playgroud)
在那里f()可以用左值或右值调用std::string,或与char const*造成临时(但这是一样的右值我恢复).例如:
int main()
{
f("test");
f(std::string());
std::string s("test");
f(std::move(s));
std::string s2("test");
f(s2); // This MUST cause one copy.
}
Run Code Online (Sandbox Code Playgroud)
只有在最后一种情况下才需要一份副本.在所有其他情况下,我希望根本不会复制,并且std::string只构造一次(在分配中Foo).
这可能吗?如果是这样,签名会如何f()?
编辑:
使用Tracked from cwds我创建了一个小测试程序,其中有一个string类在构造,移动等时打印.对于main()函数,请看这个blob.
上面的程序给出了以下输出:
NOTICE : Calling f("test")... <unfinished>
TRACKED : string0*
TRACKED : string1*(string0)
TRACKED : string2*(string1) …Run Code Online (Sandbox Code Playgroud) 在我的基于MFC的应用程序中,此代码:
std::string stdString("MappingName");
std::cout << "as String: " << stdString << std::endl;
CString cString(stdString.c_str());
std::cout << "as CString: " << cString << std::endl;
Run Code Online (Sandbox Code Playgroud)
生成此输出:
as String: MappingName
as CString: 01DEA060
Run Code Online (Sandbox Code Playgroud)
CString每次运行它的值都不同,但长度似乎是不变的.其他一些结果是042219B0和042C4378.
我已经尝试了这个线程中讨论的每个变体,结果是一样的.我还试图将Visual Studio项目中的字符集从使用Unicode字符集更改为使用多字节字符集,同样没有任何效果.
转换失败的原因是什么?
编辑:更多的测试表明,它的价值std::string似乎没有区别:
tmp as String: The quick brown fox jumps over the lazy dog
tmp as CString: 00EAAF88
Run Code Online (Sandbox Code Playgroud)
我还将字符集设置为Not Set,这也没有帮助.