GVKun编程网logo

【c++】istream 转为 string(c++怎么把string转成int)

18

此处将为大家介绍关于【c++】istream转为string的详细内容,并且为您解答有关c++怎么把string转成int的相关问题,此外,我们还将为您介绍关于c–getline的实现(istream

此处将为大家介绍关于【c++】istream 转为 string的详细内容,并且为您解答有关c++怎么把string转成int的相关问题,此外,我们还将为您介绍关于c – getline的实现(istream&is,string&str)、c – 如何将istringstream和ifstream分配给istream变量?、c – 有没有办法std ::将std :: string转换成std :: stringstream、c – 这一行发生了什么:istringstream是(line);的有用信息。

本文目录一览:

【c++】istream 转为 string(c++怎么把string转成int)

【c++】istream 转为 string(c++怎么把string转成int)

一直局限于使用cout、cin,在平时的开发中已经足够了。突然遇到istream,还真不知所措,在使用boost中,各种stream流被虐,今天一个需求就是把istream转为string,如下:

std::shared_ptr<boost::asio::streambuf> read_buffer(new boost::asio::streambuf);
......//字符串
std::istream stream(read_buffer.get());
std::istreambuf_iterator<char> eos;
std::string str(std::istreambuf_iterator<char>(stream), eos);

参考文章:http://stackoverflow.com/questions/3203452/how-to-read-entire-stream-into-a-stdstring

c – getline的实现(istream&is,string&str)

c – getline的实现(istream&is,string&str)

我的问题很简单,getline(istream,string)是如何实现的?
你如何解决像getline(char * s,streamsize n)这样固定大小的char数组的问题?
他们使用临时缓冲区和许多调用新char [length]或其他整洁的结构?

解决方法

getline(istream&,string&)以读取行的方式实现.它没有明确的实施;每个图书馆可能彼此不同.

可能的实施:

istream& getline(istream& stream,string& str)
{
  char ch;
  str.clear();
  while (stream.get(ch) && ch != '\n')
    str.push_back(ch);
  return stream;
}

c – 如何将istringstream和ifstream分配给istream变量?

c – 如何将istringstream和ifstream分配给istream变量?

我想要一个istream类型的变量,它可以保存文件的内容或字符串.我们的想法是,如果没有指定文件,那么istream类型的变量将被赋予一个字符串.

std::ifstream file(this->_path)

std::istringstream iss(stringSomething);

std::istream is

我试过将它们分配给istream变量,就像我从其他从同一基类继承的对象那样,但是没有用.

如何将istringstream和ifstream分配给istream变量?

解决方法

基类指针可以指向派生类数据. std :: istringstream和std :: ifstream都是从std :: istream派生的,所以我们可以这样做:

//Note that std::unique_ptr is better that raw pointers
std::unique_ptr<std::istream> stream;

//stream holds a file stream
stream = std::make_unique<std::ifstream>(std::ifstream{ this->_path });

//stream holds a string
stream = std::make_unique<std::istringstream>(std::istringstream{});

现在你只需要使用提取内容

std::string s;
(*stream) >> s;

c – 有没有办法std ::将std :: string转换成std :: stringstream

c – 有没有办法std ::将std :: string转换成std :: stringstream

在c引用中,我没有看到std :: stringstream构造函数接受std :: string的rvalue引用.有没有任何其他帮助功能将字符串移动到stringstream没有开销,还是有特别的理由背后这样的限制?

解决方法

I do not see a std::stringstream constructor accepting rvalue reference of std::string

那就对了.即使是str设置器也没有使用移动语义,所以将字符串移动到stringstream是不可能的(不是在当前的标准,但希望在将来).

c – 这一行发生了什么:istringstream是(line);

c – 这一行发生了什么:istringstream是(line);

正在阅读此解决方案:

https://stackoverflow.com/a/42654357/8408220

(对于“如何读取整数直到行尾?”的问题)

我不明白这条线在做什么:

istringstream is( line );

我知道istringstream是一个类,但是什么是“是”部分?

它是这样做的:

istringstream is = new istringstream(line);

解决方法

istringstream is( line );

是一个自动分配的istringstream的定义,命名是用行的内容初始化的.

istringstream is = new istringstream(line);

不会编译. new动态分配和构造一个新对象并返回一个指向它的指针.您只能指定指针指针.你可以

istringstream * is = new istringstream(line);

而make是指向istringstream的指针,但现在你必须处理动态分配的管理.确保你

delete is;

当你不再需要它时.

也就是说,更喜欢自动分配,并在进入动态路线之前给予Why should C++ programmers minimize use of ‘new’?读数.

今天的关于【c++】istream 转为 stringc++怎么把string转成int的分享已经结束,谢谢您的关注,如果想了解更多关于c – getline的实现(istream&is,string&str)、c – 如何将istringstream和ifstream分配给istream变量?、c – 有没有办法std ::将std :: string转换成std :: stringstream、c – 这一行发生了什么:istringstream是(line);的相关知识,请在本站进行查询。

本文标签: