我正在尝试迭代字符串的单词.
可以假设该字符串由用空格分隔的单词组成.
请注意,我对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)
有没有更优雅的方式来做到这一点?
构建给定文本中最常用单词的ASCII图表.
规则:
a-z和A-Z(字母字符)作为单词的一部分.She== she为了我们的目的).the, and, of, to, a, i, it, in, or, is澄清:考虑don't:这将被视为在范围2不同"单词" a-z和A-Z:(don和t).
可选(现在正式更改规范为时已晚)您可以选择删除所有单字母"单词"(这可能会缩短忽略列表).
解析给定的text(读取通过命令行参数指定的文件或管道输入;假设us-ascii)并构建word frequency chart具有以下特征的a:
width表示单词的出现次数(频率)(按比例).附加一个空格并打印单词.bar+ [space]+ word+ [space]应始终<= 80字符(确保考虑可能不同的条形和字长:例如:第二个最常见的单词可能要长得多)第一个虽然频率差别不大).在这些约束条件下最大化条宽,并适当缩放条(根据它们所代表的频率).一个例子:
这个例子的文本可以在这里找到(爱丽丝梦游仙境,刘易斯卡罗尔).
此特定文本将产生以下图表:
_________________________________________________________________________ |_________________________________________________________________________| she |_______________________________________________________________| …
可能重复:
如何在C++中拆分字符串?
在C++中拆分字符串的最佳方法?可以假设该字符串由分隔的字组成;
从我们的指南角度来看,不允许使用C字符串函数,也不允许使用Boost,因为不允许使用安全锥形开源.
我现在最好的解决方案是:
string str("denmark; sweden; india; us");
str上面应该作为字符串存储在vector中.我们怎样才能做到这一点?
感谢您的投入.
我有一个我想要标记的字符串.但是C strtok()函数需要我的字符串char*.我怎么能这么做呢?
我试过了:
token = strtok(str.c_str(), " ");
Run Code Online (Sandbox Code Playgroud)
因为把它变成a const char*而不是a 而失败了char*
我有一个包含数百万行的文件,每行有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++中的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++中已经有很多问题要求字符串>数组.我意识到这可能是一个重复的问题,但我找不到任何满足我条件的答案(将字符串拆分为数组而不使用向量).如果这是一个重复的问题,我会提前道歉.
在最近发表评论时,我发现自己说,根据我的经验,Boost并未广泛应用于受监管行业(FDA,FAA).事实上,我不知道任何使用它或使用它的项目.但我意识到,我的经验可能缺乏,所以我想知道是否有人知道在医疗设备或航空飞行系统(照明,驾驶舱控制,驾驶舱设备等)中使用升压的项目.
我不确定这是一个正确的地方(可能是其他SO网站),但我认为这将是一个很好的起点.
这不是关于是否应该在这些领域使用增强的问题,这是一个关于任何人都知道它是否被使用的问题.
编辑一些可能有助于澄清这一点的示例项目:机舱照明系统,机舱管理系统,驾驶舱仪表,输液/食品/胰岛素泵,透析机,实验室诊断设备,血液中心数据收集系统等.有些是维持生命或潜在的飞行危急,一些收集数据,一些收集用于做出医疗决策的数据等,但我相信所有都被FAA/FDA作为受监管设备.
编辑外部(没有开发链)库通常被带入这些类型的项目用于其他目的(图形库,驱动程序,USB堆栈等)这些被视为SOUP.使用提升将属于这种方法.有人知道一个以这种方式使用boost的项目吗?
EDIT Boost是一个非常大的框架,具有多个组件.我正在寻找在项目中使用过的任何部分.例如"Boost智能指针"或"Boost Enable"或"Boost Array"或"Boost Optional"等.但用于"整体",而不是部分.通过查看Boost代码并重新使用该想法不会使用; 用作系统的整个组成部分(即法律意义上的).
这是问题的核心,因为以这种方式使用意味着必须处理处理SOUP的权衡. 这可能会将此问题置于此SO站点的范围之外......不确定.
我正在寻找C++中的类似函数.string.split(delimiter)它确实返回由指定分隔符剪切的字符串数组..
http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String)
有一个好的答案,但作者删除了它.
__PRE__
我正在寻找一种简单的方法来标记字符串输入而不使用非默认库,如Boost等.
例如,如果用户输入forty_five,我想使用_作为分隔符分隔四十和五.
鉴于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*只是一个整数值,因此会受到溢出的影响.
我想从一个可靠的来源引用一个引用,即将迭代器移到"一个接一个"的元素之外是未定义的行为.