相关疑难解决方法(0)

将std :: string拆分为vector <string>的正确方法

可能重复:
如何拆分字符串?

将字符串拆分为字符串向量的正确方法是什么.分隔符是空格或逗号.

c++ string

61
推荐指数
7
解决办法
16万
查看次数

通过多个分隔符将字符串拆分为单词

我有一些文字(有意义的文字或算术表达),我想把它分成文字.
如果我有一个分隔符,我会使用:

std::stringstream stringStream(inputString);
std::string word;
while(std::getline(stringStream, word, delimiter)) 
{
    wordVector.push_back(word);
}
Run Code Online (Sandbox Code Playgroud)

如何将字符串分成具有多个分隔符的标记?

c++ string token delimiter

31
推荐指数
4
解决办法
5万
查看次数

测试stream.good()或!stream.eof()读取最后一行两次

可能重复:
为什么循环条件中的iostream :: eof被认为是错误的?

我有以下代码:

ifstream f("x.txt");
string line;
while (f.good()) {
  getline(f, line);
  // Use line here.
}
Run Code Online (Sandbox Code Playgroud)

但这会两次读到最后一行.为什么会发生这种情况,我该如何解决?

与以下情况非常相似:

ifstream f("x.txt");
string line;
while (!f.eof()) {
  getline(f, line);
  // Use line here.
}
Run Code Online (Sandbox Code Playgroud)

c++ iostream

17
推荐指数
2
解决办法
3万
查看次数

是否可以将std :: vector放到共享内存中?

我想使用CreateFileMapping()windows API函数在共享内存中创建std :: vector.我知道如何创建共享内存并管理它,但是如何将std :: vector放到内存中的固定地址?我不能在我的情况下使用boost或其他库,我正在使用CBuilder ++ 2010.我认为可能会使用一个变体

std::vector<int> myVec; 
myVec *mv;
mv = shared_memory_addr ?
Run Code Online (Sandbox Code Playgroud)

但是我如何检测向量的实际大小以调整内存大小?

c++ stl

15
推荐指数
3
解决办法
1万
查看次数

在C++中只解析来自istream的数字

我有一堆输入文件,如下所示:

(8,7,15)
(0,0,1) (0,3,2) (0,6,3)
(1,0,4) (1,1,5)
Run Code Online (Sandbox Code Playgroud)

我需要编写一个函数,一次解析这些输入一个数字,所以我需要能够用数字分隔输入,例如:8,然后是7,然后是15,然后是0,再是0,依此类推.

到目前为止我唯一想到的方法是使用istream.get()返回下一个字符的ASCII码,我可以通过将其转换为char来转换回其字符格式.然后我会检查字符是否是数字(因此括号被忽略)但这样,任何双(或三)数字数字一次只能读取一位数.

实现这一目标的最佳方法是什么?

顺便说一句,我必须使用istream.这是规范的一部分,我不允许改变

谢谢

c++ parsing input istream

6
推荐指数
2
解决办法
4943
查看次数

处理巨大的文本文件

问题: 我有一个巨大的原始文本文件(假设为3gig),我需要浏览文件中的每个单词,并发现文件中出现了多少次单词.

我建议的解决方案: 将大文件拆分成多个文件,每个拆分文件都有一个排序的文字.例如,所有以" a " 开头的单词都将存储在" _a.dic "文件中.所以,我们任何时候都不会超过26个文件.

这种方法的问题是,

我可以使用流来读取文件,但是想使用线程来读取文件的某些部分.例如,使用单独的线程读取0-1024个字节(至少有4-8个线程,基于处理器中存在的处理器数量).这是可能的还是我在做梦?

有更好的方法吗?

注意:它应该是纯c ++或基于c的解决方案.不允许有数据库等.

c++ multithreading text-files

5
推荐指数
2
解决办法
3994
查看次数

将十六进制 charArray 转换为 String

我有一个严重而恼人的问题,请帮忙

mdContext->digest[i] 是一个具有十六进制值的无符号字符数组,所以

for (i = 0; i < 16; i++)
    printf ("%02x", mdContext->digest[i]); 
Run Code Online (Sandbox Code Playgroud)

印刷 900150983cd24fb0d6963f7d28e17f72

现在......我想在一个字符数组中获取这个值,即如果我这样做

printf("%s",ArrayConverted);
Run Code Online (Sandbox Code Playgroud)

我想打印上面的字符串...请帮我做这个

我尝试过的事情

试验 1

unsigned char in[64]=0;
  int tempValue[64];
 

  for (i = 0; i < 16; i++){
      sprintf(&tempValue[i],"%02x", (unsigned char)mdContext->digest[i]);
          in[i]=(unsigned char)tempValue[i];
  }
  
 printf("%s\n\n\n",in);
Run Code Online (Sandbox Code Playgroud)

这打印 90593d4bd9372e77 但原始内容是900150983cd24fb0d6963f7d28e17f72

所以它在中间跳过了许多字符......请帮我将此十六进制字符数组转换为字符串

c c++

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

在Windows上运行单线时出现意外字符

我想生成一个输出文件,该文件显示输入文件中每个单词的频率。经过一番搜索,我发现Perl是解决此问题的理想语言,但是我不知道这种语言。

经过更多搜索后,我在stackoverflow上找到了以下代码,应该可以高效地提供我想要的解决方案:

perl -lane '$h{$_}++ for @F; END{for $w (sort {$h{$b}<=>$h{$a} || $a cmp $b} keys %h) {print "$h{$w}\t$w"}}' file > freq
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下形式运行此命令行:

perl -lane 'code' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)

由于意外的“>”(位于“ <=>”的那个),执行暂停。我做了一些研究,但不明白哪里出了问题。有人能启发我吗?谢谢!

这是我获得代码的主题: 计算文件中单词出现频率的优雅方法

如果相关,我的单词使用字母和数字,并用单个空格分隔。

perl frequency-distribution

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