标签: stdstring

std :: string如何重载赋值运算符?

class mystring { 
private:
 string s;
public:
 mystring(string ss) { 
  cout << "mystring : mystring() : " + s <<endl; 
  s = ss;
 }
 /*! mystring& operator=(const string ss) { 
  cout << "mystring : mystring& operator=(string) : " + s <<endl;
  s = ss; 
  //! return this; 
  return (mystring&)this; // why COMPILE ERROR
 } */
 mystring operator=(const string ss) {
  cout << "mystring : mystring operator=(string) : " + s <<endl;
  s = ss;
  return *this;
 } 
 mystring operator=(const char …
Run Code Online (Sandbox Code Playgroud)

c++ string operator-overloading stdstring

0
推荐指数
1
解决办法
4743
查看次数

std :: string数组的初始化程序太多了

MEA CULPA:

好的,我错了.我找到了VarInfo :: m_datatypeName []的声明,它是VarInfo :: m_datatypeName [9].是的,硬编码.我向所有为我挠头的人道歉.


我收到此错误:

too many initializers for 'std::string[9]'
Run Code Online (Sandbox Code Playgroud)

对于这个声明:

std::string       VarInfo::m_datatypeName[]  = { "", "STRING", "TIME", "MACADDRESS", "IPADDRESS", "STRINGSET", "SET", "UINT32", "INT32", "BOOL" };
Run Code Online (Sandbox Code Playgroud)

新的消息:

注意:声明中没有9或10.如果分配列表中的项目不超过九个,则此功能正常.这是第10项是问题.

结束新的信息:

我有这个模糊的回忆,std :: string声明为一些默认的字符数预分配空间,所以我想怀疑字符串数组的类似行为.

所以,这是问题所在.我应该如何正确地宣布这个?希望不必硬声明m_datatypenames的大小?

c++ stdstring

0
推荐指数
1
解决办法
4573
查看次数

为什么我不应该使用std :: string.c_str()作为缓冲区?

虽然这可能是一个愚蠢的问题,但我看到了一些关于你不应该这样做的事情,尽管它在C++ 11中被允许,但我不明白为什么.谁能解释为什么会这样?

c++ stdstring

0
推荐指数
1
解决办法
759
查看次数

C ++比较一个字符串的索引和另一个字符串?

如何比较字符串中的单个字符和另一个字符串(可能大于或小于一个字符)

这个程序给了我近300行随机错误。错误也没有引用特定的行号,只是有关“ char *”,“”或“ std :: to_string”的很多东西。

#include <iostream>
#include <string>

using std::cout;
using std::string;

int main() {
    string str = "MDCXIV";
    string test = "D";

    if (test == str[4]) {     // This line causes the problems
        cout << test << endl;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ string stdstring

0
推荐指数
1
解决办法
6706
查看次数

如何在每个元素中使用自定义字符串设置std :: vector <std :: string>

我有配置,我需要设置到某种容器我尝试设置为std :: vector但我在两种方式获得编译错误:

 std::vector<std::string> ConfigVec= new std::vector<std::string>();
  ConfigVec->at(0).append("00000\
              11111\
               00000");

    ConfigVec->at(1) = "11111\
             00000\
            00000";
Run Code Online (Sandbox Code Playgroud)

没有很多std :: string声明,最简单的方法是什么

c++ stdstring stdvector

0
推荐指数
1
解决办法
254
查看次数

为什么std :: string {"const char ptr"}有效?

我可以看到std :: string只有一个CTOR initializer_list:string (initializer_list<char> il);所以初始化列表应该与chars一起使用,对吧?为什么std::string{"some_str"}有效,它得到了const char*,对吧?

c++ stdstring initialization-list uniform-initialization c++11

0
推荐指数
1
解决办法
225
查看次数

std :: string中的0xc2字符

以下字符串的大小为4而不是我预期的3.

std::string s = "\r\n½"; 
int ss = s.size(); //ss is 4
Run Code Online (Sandbox Code Playgroud)

当循环通过字符串字符逐个字符转换为十六进制时我得到

  • 0x0D(回车的十六进制代码)
  • 0x0A(换行的十六进制代码)
  • 0xc2(十六进制代码,但这是什么?)
  • 0xbd(½字符的十六进制代码)

0xc2来自哪里?它是某种编码信息吗?我虽然std :: string在字符串中每个可见字符都有一个字符.有人可以确认0xc2是"字符集修饰符"吗?

c++ char stdstring

0
推荐指数
1
解决办法
489
查看次数

C++:在不使用反斜杠(\)的情况下考虑C++ std :: string中双引号(")的字面含义

我收到了以字符串格式收到的JSON数据.

std::string jsonStr = GetJsonStringBuffer();
Run Code Online (Sandbox Code Playgroud)

//它可能会像这样存储在jsonStr中:

jsonStr = " {"Key1":"val1","key2":"val2","key3":"val3"} " ;

BUT JSON字符串本身有双引号(").所以当GetJsonStringBuffer()返回一个C++ std :: string存储时jsonStr.它不会产生问题,因为带有json数据的双引号(")可能被视为字符串分隔符C++ std :: string.

如何处理这种情况.我是否以编程方式为json字符串中的每个双引号添加"\"(反斜杠),我认为这不是一个很好的解决方案.有没有更好的C++解决方案呢?

c++ string stdstring visual-c++ c++17

0
推荐指数
1
解决办法
73
查看次数

使用copy_if将std :: string复制到另一个字符串中

我想知道什么是选择性地将_if字符从一个字符串复制到另一个字符串的最佳方法。我有类似的东西

string buffer1("SomeUnknownwSizeAtCompileTime");
string buffer2; // WillBeAtMostSameSizeAsBuffer1ButMaybeLessAfterWeRemoveSpaces
buffer2.resize(buffer1.length());
std::copy_if(buffer1.begin(), buffer1.end(), buffer2.begin(), [](char c){
            //don't copy spaces
            return c != ' ';
});
Run Code Online (Sandbox Code Playgroud)

buffer2可能比buffer1小很多,但是我们必须分配与buffer1的长度相同的内存量。但是,复制后,buffer2的结束迭代器将指向空终止符。我到处搜索,显然这是设计使然,所以现在我想知道我是否应该对字符串不使用copy_if?

谢谢

c++ arrays copy stdstring

0
推荐指数
1
解决办法
163
查看次数

为什么std :: string没有const char *类型转换

我喜欢了解赞成与反对者拥有和不拥有这样的演员。在包括Stack Overflow在内的多个地方,我可以看到const char*强制转换被认为是一个坏主意,但我不确定为什么吗?

编写通用例程和模板时,缺少(const char*)和强制始终使用强制转换c_str()会产生一些问题。

void CheckStr(const char* s)
{
}

int main()
{
    std::string s = "Hello World!";

    // all below will not compile with 
    // Error: No suitable conversion function from "std::string" to "const char *" exists!
    //CheckStr(s);             
    //CheckStr((const char*)s);  
    // strlen(s);

    // the only way that works
    CheckStr(s.c_str());
    size_t n = strlen(s.c_str());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

例如,如果我有大量接受const char*输入的文本处理功能,并且我希望std::string每次使用都能够使用c_str()。但是以这种方式std::stringconst char*如果没有额外的努力,模板函数就不能同时使用。

作为一个问题,我可以看到一些运算符重载问题,但可以解决这些问题。

例如,正如[eerorika]指出的那样,通过允许隐式强制转换为指针,我们允许将非自愿的字符串类包含在布尔表达式中。但是我们可以通过删除bool运算符轻松解决此问题。更进一步,强制转换操作符必须明确:

class …
Run Code Online (Sandbox Code Playgroud)

c++ casting std stdstring c++11

0
推荐指数
1
解决办法
117
查看次数