问题标签 [stdstring]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
26639 浏览

为什么 std::fstream 类不采用 std::string?

这不是一个设计问题,真的,虽然看起来很像。(嗯,好吧,这是一个设计问题)。我想知道的是为什么 C++std::fstream类不在std::string其构造函数或开放方法中采用 a。每个人都喜欢代码示例,所以:

这让我一直在处理文件。C++ 库肯定会std::string尽可能使用吗?

0 投票
20 回答
530365 浏览

如何在 C++ 中将 int 附加到字符串?

我希望它打印出来Player 4

以上显然是错误的,但它显示了我在这里尝试做的事情。有没有一种简单的方法可以做到这一点,还是我必须开始添加新的包含?

0 投票
7 回答
39443 浏览

C++:如何将 fprintf 结果作为 std::string 不带 sprintf

我正在使用一个用 C++ 实现的开源 UNIX 工具,我需要更改一些代码来让它做我想做的事情。我想做最小的改变,希望我的补丁在上游被接受。首选可在标准 C++ 中实现且不会创建更多外部依赖项的解决方案。

这是我的问题。我有一个 C++ 类——我们称之为“A”——它目前使用 fprintf() 将其高度格式化的数据结构打印到文件指针。在它的打印函数中,它还递归地调用了几个成员类的相同定义的打印函数(“B”就是一个例子)。还有另一个类 C 有一个成员 std::string "foo",需要将其设置为 A 实例的 print() 结果。将其视为 A 的 to_str() 成员函数。

在伪代码中:

我应该提到 C 相当稳定,但 A 和 B(以及 A 的其他依赖项)处于不断变化的状态,因此所需的代码更改越少越好。当前的 print(FILE* F) 接口也需要保留。我考虑了几种实现 A::to_str() 的方法,每种方法都有优点和缺点:

  1. 将对 fprintf() 的调用更改为 sprintf()

    • 我不必重写任何格式字符串
    • print() 可以重新实现为: fprint(f, this.to_str());
    • 但我需要手动分配 char[]s,合并很多 c 字符串,最后将字符数组转换为 std::string
  2. 尝试在字符串流中捕获 a.print() 的结果

    • 我必须将所有格式字符串转换为 << 输出格式。有数百个 fprintf() 可以转换:-{
    • print() 必须重写,因为我知道没有标准方法可以从 UNIX 文件句柄创建输出流(尽管这个人说这可能是可能的)。
  3. 使用 Boost 的字符串格式库

    • 更多的外部依赖。呸。
    • Format 的语法与 printf() 的不同之处足以令人讨厌:

    printf(format_str, args) -> cout << boost::format(format_str) % arg1 % arg2 % etc

  4. 使用 Qt 的QString::asprintf()

    • 不同的外部依赖。

那么,我是否已经用尽了所有可能的选择?如果是这样,你认为哪个是我最好的选择?如果没有,我忽略了什么?

谢谢。

0 投票
8 回答
18496 浏览

C++ 字符串:UTF-8 还是 16 位编码?

我仍在尝试决定我的(家庭)项目是否应该使用UTF-8字符串(根据 std::string 在必要时使用额外的 UTF-8 特定函数实现)或一些 16 位字符串(实现为 std: :wstring)。该项目是一种编程语言和环境(如 VB,它是两者的结合)。

有一些愿望/限制:

  • 如果它可以在有限的硬件上运行,比如内存有限的计算机,那就太酷了。
  • 我希望代码在 Windows、Mac 和(如果资源允许)Linux 上运行。
  • 我将使用wxWidgets作为我的 GUI 层,但我希望与该工具包交互的代码限制在代码库的一个角落(我将拥有非 GUI 可执行文件)。
  • 在处理用户可见文本和应用程序数据时,我想避免使用两种不同类型的字符串。

目前,我正在使用 std::string,目的是仅在必要时使用 UTF-8 操作函数。它需要更少的内存,并且似乎是许多应用程序的发展方向。

如果您推荐 16 位编码,那是哪一种:UTF-16UCS-2?另一个?

0 投票
11 回答
48883 浏览

你如何构造一个带有嵌入 null 的 std::string?

如果我想构造一个带有如下行的 std::string :

我想在结果字符串中包含三个字符(a,null,b),我只得到一个。什么是正确的语法?

0 投票
7 回答
10718 浏览

使用 std::string 时出现 bad_alloc 错误

我目前正在开发一个依赖于我提供文件路径的项目(例如。C:\Path.pth)。现在,我昨天打电话给我std::string,一切正常:

但现在它不起作用。它抛出一个bad_alloc. 似乎 ' \' 字符是问题所在。我什至尝试将\x5C其用作它的 ascii 值,但结果相同。

现在,我的问题是,是否有可能我搞砸了一些#define、一些编译器选项或其他可能导致这种情况的“非代码”?我正在使用 VS 2005。

任何帮助将非常感激


皮埃尔BdR

.. 这听起来很有可能。或者至少,它必须:P

由于没有人提到某种 /SetStringCharSize:2bit-compiler 选项,我认为可以安全地假设我的代码必须在某处搞砸一些东西,而且它不仅仅是一个愚蠢的编译器选项(或类似的)是错误的。 .

0 投票
9 回答
3395 浏览

if(str1==str2) 与 if(str1.length()==str2.length() && str1==str2)

我在另一个人的代码中看到了第二个,我想这种长度比较是为了提高代码效率。它用于具有特定字典的脚本语言的解析器:单词长度为 4 到 24 个字母,平均为 7-8 个小写字母,字母表包括 26 个拉丁字母加上“@”、“$”和“_”。

长度比较用于转义 == 运算符处理 STL 字符串,这显然比简单的整数比较需要更多时间。但同时给定字典中的首字母分布比单词大小的分布更宽,因此比较字符串的两个首字母通常比字符串的大小更经常不同。这使得长度比较变得不必要。

我已经进行了一些测试,这就是我发现的:在测试两个随机字符串比较数百万次时,第二种方法要快得多,所以长度比较似乎很有帮助。但是在一个工作项目中,它在调试模式下运行得更慢,而在发布模式下运行速度不够快。

所以,我的问题是:为什么长度比较可以加快比较速度,为什么可以减慢速度?

UPD:我也不喜欢第二种方式,但我想这样做是有原因的,我想知道这是什么原因。

UPD2:说真的,问题不在于如何做到最好。在这种情况下,我什至不再使用 STL 字符串。难怪长度比较是不必要的和错误的等等。奇怪的是 - 它确实倾向于在某个测试中稍微好一点。这怎么可能?

0 投票
5 回答
4975 浏览

C++ std::string 构造函数

对此的任何想法将不胜感激:

我现在希望这两个字符串是独立的,即我可以将“, world”附加到 s2 并且 s1 仍然会读取“hello”。这是我在 windows 和 linux 上找到的,但在 HP_UX 机器上运行代码似乎 s2 和 s1 是同一个字符串,所以修改 s2 会更改 s1。

这听起来绝对疯狂吗,有人见过类似的东西吗?

0 投票
24 回答
734927 浏览

如何连接 std::string 和 int

我认为这将非常简单,但它提出了一些困难。如果我有

我如何将它们组合成一个字符串"John21"

0 投票
8 回答
137095 浏览

如何将 C++ 字符串转换为 int?

可能重复:
如何在 C++ 中将字符串解析为 int?

如何将 C++ 字符串转换为 int?

假设您希望字符串中包含实际数字(例如,“1”、“345”、“38944”)。

另外,假设您没有 boost,并且您真的想以 C++ 方式进行,而不是使用笨拙的旧 C 方式。