标签: stringstream

从文件C++中读取多个字符串

我需要逐个读取存储在文件中的不同值.所以我想我可以ifstream用来打开文件,但由于文件设置的方式是一行可能包含三个数字,另一行一个数字或两个数字我不知道如何读取每个数字逐一.我正在考虑使用,stringstream但我不确定这是否有用.

该文件是这样的格式.

52500.00       64029.50      56000.00
65500.00       
53780.00       77300.00     
44000.50       80100.20      90000.00      41000.00    
60500.50       72000.00
Run Code Online (Sandbox Code Playgroud)

我需要读取每个数字并将其存储在一个vector.

完成此任务的最佳方法是什么?即使每行包含不同数量的数字,也一次读取一个数字?

c++ stringstream getline ifstream file-read

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

Delphi:TStringList不懂BOM?

TStringList不了解BOM吗?

Tf1 := TFileStream.Create(LIGALOG+'liga.log',fmOpenRead or fmShareDenyNone);

str:=tstringlist.Create;
str.LoadFromStream(tf1);

String1:='FStream '+inttostr(tf1.Size)+'/ String: '+(str.Text);
Run Code Online (Sandbox Code Playgroud)

如果文本文件以UTF-8 + BOM保存Str.Count=0; Str.Text=''.没有BOM,一切都还可以.
这是正常的吗?

delphi stringstream filestream decoding

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

C++ Stringstream:接受一个字符串,但不接受存储在变量中的字符串.为什么?

我一直在尝试将输入字符串拆分为由空格描绘的较小字符串.我在这里找到了这段代码:

stringstream ss ("bla bla");
string s;

while (getline(ss, s, ' ')) {
cout << s << endl;
}
Run Code Online (Sandbox Code Playgroud)

哪个工作得很好.但是,如果我用包含字符串的变量替换"bla bla":

string userInput;
cin >> userInput;

stringstream ss (userInput);
string s;

while (getline(ss, s, ' ')) {
cout << s << endl;
}
Run Code Online (Sandbox Code Playgroud)

只打印出第一个单词/ char/string.这是为什么?有办法解决吗?我已经查看了一些字符串流问题,但问题是我真的不知道我在寻找什么.

c++ stringstream

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

为什么TStringStream.Bytes与'TStream.Read'的不同之处

使用TStringStream时,bytes使用其Bytes属性与bytes提取的使用不同TStream.Read.如下所示:

  1. 所述bytes使用所提取的TStream.Read表示正确的数据.
  2. bytes使用它的Bytes属性包含更多的数据.(正确的最后一个字节与错误的字节bytes不同bytes)

你能帮忙评论可能的原因吗?非常感谢您的帮助!

PS:Delphi XE,Windows 7.(似乎在Delphi 7中的TStringStream没有LoadFromFile或SaveToFile.)

PS:可以从SkyDrive下载示例文件:REF_EncodedSample和REF_DecodedSample.(Zlib压缩的图像文件.).

procedure CompareBytes_2;
var
  ss_1: TStringStream;
  ss_2: TStringStream;
  sbytes_Read: TBytes;
  sbytes_Property: TBytes;
  len_sbytes_Read: Integer;
  len_sbytes_Property: Integer;
  filename: string;
begin
  filename := 'REF_EncodedSample';  // textual data
//  filename := 'REF_DecodedSample';  // non-textual data

  ss_1 := TStringStream.Create;
  ss_1.LoadFromFile(filename);
  ss_2 := TStringStream.Create;
  ss_2.LoadFromFile(filename);

  ss_1.SaveToFile(filename+ '_CopyByStringStream_1');
  ss_2.SaveToFile(filename+ '_CopyByStringStream_2');

  len_sbytes_Read := ss_1.Size;
  SetLength(sbytes_Read, len_sbytes_Read); …
Run Code Online (Sandbox Code Playgroud)

delphi byte stringstream

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

在字符串流中放入int时,会插入奇怪的字符

我正在尝试使用stringstreams来获取字符串.我是这样做的:

std::string const DilbertImage::startUrl = "http://tjanster.idg.se/dilbertimages/dil";
std::string const DilbertImage::endUrl = ".gif";

 DilbertImage::DilbertImage(int d)
{
    cal.setDate(d);

    int year, month, date;

    year = cal.getYear();
    month = cal.getMonth();
    date = cal.getNumDate();

    std::stringstream ss;

    ss << year << "/";

    if(month < 10)
    {
        ss << 0;
    }

    ss << month << "/" << "Dilbert - " << cal.getNumDate() << ".gif";

    filePath = ss.str();

    ss.str("");
    ss.clear();

    ss << startUrl << date << endUrl;

    url = ss.str();

    std::cout << url << '\t' << filePath << std::endl; …
Run Code Online (Sandbox Code Playgroud)

c++ stl stringstream

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

将unsigned char*数组转换为std :: string

我正在使用此代码将unsigned char*(指向256个值的数组)转换为std :: string:

int ClassA::Func(unsigned char *dataToSend, int sendLength)
{
    std::stringstream convertStream;
    std::string dataToSendStr = "";

    for(int i=0; i<=sendLength; i++) convertStream << dataToSend[i];    

    while(!convertStream.eof()) convertStream >> dataToSendStr;
    ...
}
Run Code Online (Sandbox Code Playgroud)

但后来我有这种格式的dataToSendStr:

dataToSendStr "" 
[0]           0x00 
[1]           0x00 
[2]           0x04 
[3]           0xC0
Run Code Online (Sandbox Code Playgroud)

如果我现在使用这个值我只得到""而不是重要值[0-3]!

- >需要类似:dataToSendStr"000004C0"

谢谢你的帮助!

c++ arrays stringstream stdstring

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

为什么strtok不适用于stringstream?

考虑以下参数:

char words[8] = "one two";
string word1;
string word2;
stringstream ss;
Run Code Online (Sandbox Code Playgroud)

这段代码的输出:

ss << strtok(words, " ");
ss >> word1;
ss << strtok(NULL, " ");
ss >> word2;
cout << "Words: " << word1 << " " << word2 << endl;
Run Code Online (Sandbox Code Playgroud)

是:

Words: one
Run Code Online (Sandbox Code Playgroud)

而对于这段代码

ss << strtok(words, " ");
ss >> word1;
char* temp = strtok(NULL, " ");
word2 = temp;
cout << "Words: " << word1 << " " << word2 << endl;
Run Code Online (Sandbox Code Playgroud)

输出是:

Words: one two …
Run Code Online (Sandbox Code Playgroud)

c++ split stringstream strtok

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

使用std :: cout和std :: stringstream时,如何使符号出现在填充的末尾?

我有以下代码用于格式化打印输出,总是4位数,包含符号:

std::stringstream pitch; 
pitch.precision(0);

pitch.width(4);
pitch.fill('0');

pitch << std::showpos << (int)(m_values["Pitch_1"]);
Run Code Online (Sandbox Code Playgroud)

我还想显示符号("+"/" - "),但我希望它在填充之前,如下所示:

+002
Run Code Online (Sandbox Code Playgroud)

但是,我在这里的代码将"+"符号移动到最高位:

00+2
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我如何更改格式以便我拥有前者而不是后者?

c++ cout std stringstream

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

比较std :: stringstream的内容

我有两个std::stringstream:ss1ss2,它们作为两个不同函数的参数给出,这些函数用数据填充它们.

我想要理智地检查这些函数是否写入相同的内容.我如何测试两个相等std::stringstream

alg1.print(ss1);
alg2.print(ss2);

if(ss1 != ss2) {
   cout << "Content not identical!" << endl;
}
Run Code Online (Sandbox Code Playgroud)

不行.将它们转换为str()工作,但这似乎无效.肯定有更好的办法?

c++ compare stringstream c++11

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

可以在不改变状态的情况下迭代stringstream中的字符吗?

给定a stringstream ss,是否有一种巧妙的方法来迭代当前的字符,而不改变其状态?

当然,我可以stringstream ss2(ss.str())然后吃ss2中的字符,但我希望有一种方法可以避免创建那个中间字符串,因为我ss可能包含数百万个字符.


背景:我将一些数据编码到ss,并希望在将CRC写入磁盘文件之前附加CRC.它是用于计算我想要迭代的CRC ss.道德要做的事情可能是在运行中继承stringstream和维护CRC,但这对于我的直接目的来说感觉太麻烦了.

c++ stringstream c++11

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