草庐IT

slice_str

全部标签

c++ - 当字符串保存在一个集合中时,c_str() 是否仍然有效

我有一个旧项目需要维护,其中使用了constchar*。出于某种原因,我想保留大量运行时生成的字符串。所以我创建了一个全局变量std::set来保存这些字符串。当生成新字符串时,除了添加到集合中外,我还会返回并发送newString.c_str(),它将保存在其他地方。例如。std::setg_stringDB;voidArchieveString(AStruct*container,constchar*temporaryString){autoit=g_stringDB.emplace(temporaryString);container->validString=it->first

c++ - C++中c_str()的线程安全

我创建了一个类SettingsClass,它包含静态字符串,这些静态字符串包含MySQLC++连接器库要使用的数据库连接字符串(例如主机名、数据库名、用户名、密码)。每当函数需要连接到数据库时,它都会对这些静态字符串调用.c_str()函数。例如:ClassSettingsClass{public:staticstringhostname;...}SettingsClass;stringSettingsClass::hostname;//AfunctionthatneedstoconnecttotheDBuses:driver=get_griver_instance();driver-

c++ - str.clear() 和 str = ""之间的区别

我有一个C++std::stringstr,我已将其设置为某个字符串,现在想重置它以便再次使用它。调用str.clear()与调用str=""有区别吗?编辑。澄清一下:我通过向其附加一个char数组缓冲区来重用str:str.append(buf) 最佳答案 没有有效的区别。根据实现的不同,使用clear()可能比将char指针分配给零更快。但是,即使情况并非如此,也更喜欢更清楚地表达您的意图的方法。如果要清除字符串,请使用clear()。如果要分配空字符串,请使用=""。虽然我会注意到,但你说,“所以我可以再次使用它。”又用它干什

c++ - 'for(auto &str : vec)' 内部 for 循环的目的是什么?

我是C++的新手,正在尝试学习vector的概念。我在网上看到这段代码。我的问题是,'for(auto&str:vec)'中的内部for循环的目的是什么?为什么作者要对第一个引用(&str)创建第二个引用(&c)?intmain(){vectorvec;for(stringword;cin>>word;vec.push_back(word)){}for(auto&str:vec){for(auto&c:str){c=toupper(c);}}for(inti=0;i!=vec.size();++i){if(i!=0&&i%8==0)cout 最佳答案

c++ - `(c = *str) != 0` 是什么意思?

intequiv(char,char);intnmatches(char*str,charcomp){charc;intn=0;while((c=*str)!=0){if(equiv(c,comp)!=0)n++;str++;}return(n);}“(c=*str)!=0”到底是什么意思?有人可以向我解释一下或帮助我提供正确的术语以自己搜索解释吗? 最佳答案 这个表达式有两部分:c=*str-这是通过取消引用指针对c的简单赋值,val!=0-这是与零的比较。这是可行的,因为赋值是一个表达式,即它有一个值。赋值的值与被赋值的值相同,

c++ - std::string 的 strlen(str.c_str()) 和 str.length() 之间的区别

作为一种隐含的理解,我一直认为std::string的每一个实现必然必须满足strlen(str.c_str())==str.length()对于每个字符串str。C++标准对此有何规定?(是吗?)背景:至少VisualC++和gcc附带的实现没有这个属性。考虑这个例子(参见hereforaliveexample)://Output://stringsaysitslengthis:13//strlensays:5#include#include#includeintmain(){std::stringstr="Hello,world!";str[5]=0;std::cout当然,没有注

c++ - 除了使用 str.substr( ) 在给定位置提取子字符串之外,还有其他方法吗?

我正在尝试比较两个std::strings,并确定字符串A是否与字符串B相同,但插入或删除了单个字符。否则返回假。例如:“start”和“strt”或“ad”和“add”目前:if(((sizeA-sizeB)!=1)&&((sizeB-sizeA)!=1)){returnfalse;}if(sizeA这可以完美地工作,但是gprof告诉我这个功能陷入了困境。我尝试将for循环转换为使用迭代器来访问字符,但这使我的运行时间增加了一倍。我将它缩小到我对std::string.substr()的使用,因为每次stringA和stringB的大小相差1时它都会构造新的字符串。当第一个字符不同

基于另一列中的str中的str中添加int值

我正在尝试编写一个代码,该代码将加起来每个状态中的所有“计数”。这是我的.dbf(CSV)文件的示例。CountLatLonindex_righSTATE134531.551580000000000-88.4483800000000001992Alabama44531.999867999999900-88.4045430000000001992Alabama29932.448521000000000-88.3601960000000001992Alabama10632.897511999999900-88.3153290000000001992Alabama22933.346817000000

c++ - Clang:将 bind 或 mem_fn 与 string::c_str 和 transform 结合使用时出现问题

尝试将std::stringvector转换为constchar*vector:#include#include#include#includeintmain(intargc,char**argv){std::vectorvalues;values.push_back("test1");values.push_back("test2");values.push_back("test3");std::vectorc_values(values.size());std::transform(values.begin(),values.end(),c_values.begin(),std::

C++: std::vector - "slice"一个 vector 是可能的吗?

我正在编写一些代码来集成ODE。这个问题既是对编码建议的请求,也是对解决方案的请求,因此如果您对我即将提供的建议有其他建议,请告诉我!要由ODE积分器积分的“对象”以6个“block”的形式出现...这样做的原因是我有一个double的std::vector,它们按以下方式排列:前3个double是位置坐标;x、y和z。接下来的3个double坐标是速度坐标;x、y和z。所以,现在你知道了,我有一个函数,它接受成对的“位置”“”“vector”“”作为参数并返回某种结果......看看我在哪里我要接受这个吗?目前函数需要2批位置坐标,方式如下:std::vectormagic_grav