相关疑难解决方法(0)

如何迭代字符串的单词?

我正在尝试迭代字符串的单词.

可以假设该字符串由用空格分隔的单词组成.

请注意,我对C字符串函数或那种字符操作/访问不感兴趣.另外,请在答案中优先考虑优雅而不是效率.

我现在最好的解决方案是:

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int main()
{
    string s = "Somewhere down the road";
    istringstream iss(s);

    do
    {
        string subs;
        iss >> subs;
        cout << "Substring: " << subs << endl;
    } while (iss);
}
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方式来做到这一点?

c++ string split

2895
推荐指数
43
解决办法
214万
查看次数

构建给定文本中最常用单词的ASCII图表

挑战:

构建给定文本中最常用单词的ASCII图表.

规则:

  • 只接受a-zA-Z(字母字符)作为单词的一部分.
  • 忽略套管(She== she为了我们的目的).
  • 忽略以下的话(非常苛刻,我知道): the, and, of, to, a, i, it, in, or, is
  • 澄清:考虑don't:这将被视为在范围2不同"单词" a-zA-Z:(dont).

  • 可选(现在正式更改规范为时已晚)您可以选择删除所有单字母"单词"(这可能会缩短忽略列表).

解析给定的text(读取通过命令行参数指定的文件或管道输入;假设us-ascii)并构建word frequency chart具有以下特征的a:

  • 显示22个最常见单词的图表(另请参见下面的示例)(按降序频率排序).
  • 条形width表示单词的出现次数(频率)(按比例).附加一个空格并打印单词.
  • 确保这些条形(加上空格 - 单词空格)始终适合:bar+ [space]+ word+ [space]应始终<= 80字符(确保考虑可能不同的条形和字长:例如:第二个最常见的单词可能要长得多)第一个虽然频率差别不大).在这些约束条件下最大化条宽,并适当缩放条(根据它们所代表的频率).

一个例子:

这个例子的文本可以在这里找到(爱丽丝梦游仙境,刘易斯卡罗尔).

此特定文本将产生以下图表:

 _________________________________________________________________________
|_________________________________________________________________________| she 
|_______________________________________________________________| …

language-agnostic code-golf

156
推荐指数
26
解决办法
3万
查看次数

使用标记拆分C++ std :: string,例如";"

可能重复:
如何在C++中拆分字符串?

在C++中拆分字符串的最佳方法?可以假设该字符串由分隔的字组成;

从我们的指南角度来看,不允许使用C字符串函数,也不允许使用Boost,因为不允许使用安全锥形开源.

我现在最好的解决方案是:

string str("denmark; sweden; india; us");

str上面应该作为字符串存储在vector中.我们怎样才能做到这一点?

感谢您的投入.

c++

75
推荐指数
3
解决办法
14万
查看次数

使用带有std :: string的strtok

我有一个我想要标记的字符串.但是C strtok()函数需要我的字符串char*.我怎么能这么做呢?

我试过了:

token = strtok(str.c_str(), " "); 
Run Code Online (Sandbox Code Playgroud)

因为把它变成a const char*而不是a 而失败了char*

c++ strtok

45
推荐指数
4
解决办法
12万
查看次数

如何快速解析C++中以空格分隔的浮点数?

我有一个包含数百万行的文件,每行有3个以空格分隔的浮点数.读取文件需要花费大量时间,因此我尝试使用内存映射文件读取它们,但发现问题不在于IO的速度,而在于解析速度.

我当前的解析是获取流(称为文件)并执行以下操作

float x,y,z;
file >> x >> y >> z;
Run Code Online (Sandbox Code Playgroud)

Stack Overflow中的某些人建议使用Boost.Spirit,但我找不到任何简单的教程来解释如何使用它.

我正在尝试找到一种简单有效的方法来解析看起来像这样的行:

"134.32 3545.87 3425"
Run Code Online (Sandbox Code Playgroud)

我真的很感激一些帮助.我想用strtok来分割它,但我不知道如何将字符串转换为浮点数,我不太确定它是最好的方法.

我不介意解决方案是否会提升.我不介意它是不是有史以来最有效的解决方案,但我确信它可以加倍速度.

提前致谢.

c++ parsing boost-spirit

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

C++:将字符串拆分为数组

我试图插入一个由空格分隔的字符串到一个字符串数组,而不使用C++中的vector.例如:

using namespace std;
int main() {
    string line = "test one two three.";
    string arr[4];

    //codes here to put each word in string line into string array arr
    for(int i = 0; i < 4; i++) {
        cout << arr[i] << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

test
one
two
three.
Run Code Online (Sandbox Code Playgroud)

我知道在C++中已经有很多问题要求字符串>数组.我意识到这可能是一个重复的问题,但我找不到任何满足我条件的答案(将字符串拆分为数组而不使用向量).如果这是一个重复的问题,我会提前道歉.

c++ arrays string vector

19
推荐指数
2
解决办法
13万
查看次数

Boost曾经被用于受监管的项目(FDA,FAA)吗?

在最近发表评论时,我发现自己说,根据我的经验,Boost并未广泛应用于受监管行业(FDA,FAA).事实上,我不知道任何使用它或使用它的项目.但我意识到,我的经验可能缺乏,所以我想知道是否有人知道在医疗设备或航空飞行系统(照明,驾驶舱控制,驾驶舱设备等)中使用升压的项目.

我不确定这是一个正确的地方(可能是其他SO网站),但我认为这将是一个很好的起点.

这不是关于是否应该在这些领域使用增强的问题,这是一个关于任何人都知道它是否被使用的问题.

编辑一些可能有助于澄清这一点的示例项目:机舱照明系统,机舱管理系统,驾驶舱仪表,输液/食品/胰岛素泵,透析机,实验室诊断设备,血液中心数据收集系统等.有些是维持生命或潜在的飞行危急,一些收集数据,一些收集用于做出医疗决策的数据等,但我相信所有都被FAA/FDA作为受监管设备.

编辑外部(没有开发链)库通常被带入这些类型的项目用于其他目的(图形库,驱动程序,USB堆栈等)这些被视为SOUP.使用提升将属于这种方法.有人知道一个以这种方式使用boost的项目吗?

EDIT Boost是一个非常大的框架,具有多个组件.我正在寻找在项目中使用过的任何部分.例如"Boost智能指针"或"Boost Enable"或"Boost Array"或"Boost Optional"等.但用于"整体",而不是部分.通过查看Boost代码并重新使用该想法不会使用; 用作系统的整个组成部分(即法律意义上的).

这是问题的核心,因为以这种方式使用意味着必须处理处理SOUP的权衡. 这可能会将此问题置于此SO站点的范围之外......不确定.

c++ boost medical

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

类似于C++中java的string.split("")的函数

我正在寻找C++中的类似函数.string.split(delimiter)它确实返回由指定分隔符剪切的字符串数组..

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String)

有一个好的答案,但作者删除了它.

__PRE__

c++ string split

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

C++ Tokenize String

我正在寻找一种简单的方法来标记字符串输入而不使用非默认库,如Boost等.

例如,如果用户输入forty_five,我想使用_作为分隔符分隔四十和五.

c++ string split token

13
推荐指数
1
解决办法
2万
查看次数

非解除引用的迭代器是否超过了数组未定义行为的"一个接一个"的迭代器?

鉴于int foo[] = {0, 1, 2, 3};我想知道指向过去"一个过去"的迭代器是否无效.例如:auto bar = cend(foo) + 1;

有大量的抱怨和警告,这是Stack Overflow问题中的"未定义行为",如下所示:c ++当过去结束迭代器时,迭代器+整数的结果是什么?不幸的是,唯一的来源是挥手.

我购买它的麻烦越来越多,例如:

int* bar;
Run Code Online (Sandbox Code Playgroud)

是未初始化的,但肯定不会调用未定义的行为,并且给定了足够的尝试,我确信我可以找到一个实例,其中未初始化的值bar具有相同的值cend(foo) + 1.

这里最大的困惑之一是我不会要求解除引用cend(foo) + 1.我知道这将是未定义的行为,标准禁止它.但是这样的答案:https://stackoverflow.com/a/33675281/2642059只引用解除引用这样的迭代器是非法的,回答这个问题.

我也知道C++只保证它cend(foo)是有效的,但它可能会numeric_limits<int*>::max()在这种情况下cend(foo) + 1溢出.我对这种情况不感兴趣,除非它在标准中被调出,因为我们不能让迭代器超过"一个接一个结束".我知道这int*只是一个整数值,因此会受到溢出的影响.

我想从一个可靠的来源引用一个引用,即将迭代器移到"一个接一个"的元素之外是未定义的行为.

c++ arrays pointers iterator language-lawyer

13
推荐指数
2
解决办法
1838
查看次数