处理空字符串情况,从 std::istream 中提取字符串

2023-12-23

使用以下代码从 std::istream 中提取字符串:

#include <sstream>
#include <iostream>

void parse(std::istream & is, std::string & out)
{
    is >> out;
}

int main(int argc, char** argv)
{
    if (argc>1)
    {
        std::istringstream is(argv[1]);
        std::string out("__INIT__");
        std::cout << "good:"  << is.good() << " fail:"<< is.fail() <<  " eof:"<< is.eof()  << " in_avail:"<< is.rdbuf()->in_avail() << " value:" << out << std::endl;
        parse(is, out);
        std::cout << "good:"  << is.good() << " fail:"<< is.fail() <<  " eof:"<< is.eof()  << " in_avail:"<< is.rdbuf()->in_avail() << " value:" << out << std::endl;
    }
}

使用非空字符串时,输出如下所示:

$./a.out "TEST" 
good:1 fail:0 eof:0 in_avail:4 value:__INIT__
good:0 fail:0 eof:1 in_avail:0 value:TEST

使用空字符串时,输出如下所示:

$./a.out ""
good:1 fail:0 eof:0 in_avail:0 value:__INIT__
good:0 fail:1 eof:1 in_avail:0 value:__INIT__

相反,我期望:

good:1 fail:0 eof:0 in_avail:0 value:__INIT__
good:0 fail:0 eof:1 in_avail:0 value:

运算符>> 不提取空字符串。结果与空字符串或没有数据相同。

任何处理这种情况的建议将不胜感激。


如果您正在使用您的parse专门用于提取的函数,您可以简单地将其视为对空缓冲区的检查。如果有的话,只需clear字符串:

void parse(std::istream& is, std::string& out)
{
    if (is.eof() || is.peek() == std::char_traits<char>::eof())
    {
        out.clear();
        return;
    }

    is >> out;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理空字符串情况,从 std::istream 中提取字符串 的相关文章

随机推荐

  • 了解 Haskell callCC 示例

    我无法理解之前的答案question https stackoverflow com questions 20451022 how to interpret callcc in haskell 我希望以下的解释能够澄清一些事情 下面的例子来
  • Angularjs:控制器中的$filter

    使此过滤器正常工作时遇到问题 scope imgCollection then function images scope images images thisGal images if scope images 0 order 0 con
  • 如何使用 CABasicAnimation 对图层的框架进行动画处理?

    我想我必须将 CGRect 转换为一个对象才能将其传递给 fromValue 吗 这就是我尝试的方法 但它不起作用 CABasicAnimation frameAnimation CABasicAnimation animationWith
  • Linux:将 100 万个文件移动到基​​于前缀创建的文件夹中

    我有一个名为 images 的目录 其中包含大约一百万张图像 是的 我想编写一个 shell 命令将所有这些图像重命名为以下格式 原文 filename jpg新 f i l filename jpg 有什么建议么 Thanks Dan f
  • 在ImageView中设置图像的宽度和高度

    无论我尝试什么 我都无法设置从肥皂服务传递到 Android 模拟器的图像的宽度和高度 我使用 ImageView 如下 byte bloc Base64 decode result Base64 DEFAULT Bitmap bmp Bi
  • 按顺序从 backstack 中获取所有片段

    我在用碎片在我的应用程序项目中 所有片段都添加到后退栈 fragmentTransaction addToBackStack null 稍后 从其中获取所有片段的正确方法是什么 后退栈为了 使用getBackStackEntryCount
  • 对 Win32 API 调用在汇编中的工作方式感到困惑

    我不知道如何更好地问这个问题 但为什么会这样 call ExitProcess 与此相同吗 mov eax ExitProcess mov eax eax call eax 我认为这些是等效的 call ExitProcess mov ea
  • BrowserModule已经加载

    这是我的代码 import CommonModule from angular common import HttpClientModule from angular common http import NgModule from ang
  • 如何在UI上动态显示图片?

    我正在研究显示由 HTML 表格和图像组成的屏幕 HTML 表格是完全动态的 代码工作流程 当用户加载页面 带有 URL 时 我在不同部分渲染 HTML 表 这意味着页面已加载 我一次获取 JSON 格式的所有表数据 然后一次显示 3 3
  • 循环内变量声明

    我有一个函数正在循环内对数组进行一些操作 每次迭代后 应该将数组初始化为零 那么以下哪一项会带来性能优势 one c int main void char buf 4096 0 while 1 flag Some operation her
  • 有没有办法让我在锁定屏幕上显示自定义消息?

    我正在使用 DevicePolicyManager 制作一个可以锁定设备的应用程序 并且想知道如果我使用 DevicePolicyManager 锁定设备 是否有办法在锁定屏幕上显示自定义消息 应该有一种方法可以在日志屏幕上方显示某种活动
  • 使用 Scala 模板的动态 Javascript

    我正在尝试本地化我的 Javascript 文件 例如 我会有 var count 0 choices choice each function i input this each function count this attr plac
  • 无法使用映射插件映射数据?昏死

    我正在尝试绑定我的数据以进行查看 但我的所有尝试均未成功 我将数据数组存储在变量中 然后使用映射插件 并将它们作为可观察的数据将其绑定到 view 有趣的是我没有收到任何错误console我查了一下 span span 我可以看到我的数组
  • 使用 Jackson 将数组从 javascript 传递到 java servlet

    我正在尝试使用 Jackson 将数组从 javascript 传递到 java servlet 这是如何完成的 谢谢 基本思想应该很简单 Server doPost HttpServletRequest req HttpServletRe
  • 更改文件时更新输入[type=file]的状态

    我有这个文件输入
  • 使用 xmlhttp.open() 如何向 url 添加多个参数?

    我有这个代码 xmlhttp open GET getuser php q str true where q str 我想传递第二个变量 我该怎么做 xmlhttp open GET getuser php q q r r true 请注意
  • 跨列表取平均值

    我在 R 中有这个列表 我只能访问该列表 而不是 d1 d2 d3 d4 我只是将这些包含在内以使这个 stackoverflow 问题可重现 d1 data frame v1 rnorm 20 20 20 c2 rnorm 20 20 2
  • SqlServer触发器可以推送到ActiveMQ吗

    谁能告诉我是否可以将数据从 SqlServer 触发器直接推送到 ActiveMQ 我查遍了 ActiveMQ 文档 但没有看到任何对它的引用 我们可以使用轮询数据库插入的服务 但触发器将是理想的解决方案 但触发器将是理想的解决方案 绝对不
  • Spring注入内部类

    是否可以将bean注入到内部类中 例如 Named public class outer Inject private SomeClass inst Injected correctly private static class inner
  • 处理空字符串情况,从 std::istream 中提取字符串

    使用以下代码从 std istream 中提取字符串 include