草庐IT

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++ - 为什么 stringstreams rdbuf() 和 str() 给我不同的输出?

我有这个代码,intmain(){std::stringst;std::stringstreamss;ssstr():"str();std::cout给我这个输出ss.rdbuf()->str():hejhejmeddigss.rdbuf():hejmeddig但这是为什么呢?是因为ostreams对operator 最佳答案 ss.rdbuf()->str();返回所有缓冲区内容的拷贝。在做什么std::cout?查看说明basic_ostream&operator*sb);它从缓冲区逐个字符地读取并将它们写入ostream,直到

c++ - C++ 字符串和 C 字符串 ( .c_str() ) 之间的区别

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicates:Whydoesstd::stringnotprovideaconversiontoconstchar*?Whydoesn'tstd::stringprovideimplicitconversiontochar*?case1:voidreadFile(conststring&inputfile){ifstreamin(inputfile);}case2:voidreadFile(conststring&inputfile){ifstreamin(inputfile.c_str());}当然,我知道如何调用if

c++ - 是否必须释放 std::string.c_str() 或 std::string.data() 返回的指针?

据我所知,当您调用c_str()/data()时,std::string会创建其内容的标识数组拷贝方法(有/没有终止NUL-char,在这里无关紧要)。不管怎样,对象是否也负责释放这个数组,还是我必须这样做?简而言之:std::stringhello("content");constchar*Ptr=hello.c_str();//useit....delete[]Ptr;////really???我只是想在内存分配方面保持安全。 最佳答案 不,您不需要释放ptr指针。ptr指向位于内部位置某处的不可修改字符串(实际上这是编译器的实