我正在做一个Date
类,它将string
作为参数,如:
11/13/2007 9/23/2008 9/23/2008
...并设置月份,日期和年份对象,如何使用substr()
功能,还是有其他功能?
答案 0 :(得分:2)
在你的情况下,我会使用好的旧C(!)sscanf
函数:
unsigned int year, month, day;
char c;
if(sscanf(input, "%u/%u/%u%c", &month, &day, &year, &c) == 3)
{
// check ranges of your date variables!
}
您似乎使用美国日期格式,因此我相应地设置参数。
想知道我为什么要读一个额外的角色?它会在日期字符串末尾捕获其他数据以检测无效格式(如果数据跟随,结果将为4,否则,只读取3个值,将返回)。一个缺点:在三个数字之前,空格被忽略,所以如果你想要禁止,你需要额外的检查(例如"%n %n%u"
并比较,如果两个相应的值相等)。
(如果您的输入是::std::string
个实例,当然需要使用sscanf(input.c_str(), ...)
。)
答案 1 :(得分:1)
如果您使用的是C ++ 11,则可以使用import org.viz.lightning._
var viz: Visualization = _
//...
val lgn = Lightning(host="http://localhost:3000")
lgn.createSession("streamingtest")
// initialization
val series = Array.fill(1)(Array.fill(1)(r.nextInt(1)))
viz = lgn.lineStreaming(series)
// ...
// adding new data (THIS DATA IS NOT SENT TO THE SERVER)
val newdata: Map[String, Any] = Map("1" -> 1.0)
viz.append(newdata)
库:
<regex>
这可能对你的情况来说太过分了,但请记住,通过使用正则表达式,你也可以对输入进行某种形式的验证。在上面的示例中,如果您传递的内容不是dd / dd / dddd,其中&#34; d&#34;是一个数字,你将输入&#34;错误&#34;代码块。当然,99/99/9999将被视为有效输入,但您也可以使用更复杂的正则表达式来解决这种情况。
使用分隔符解析字符串的另一个选项是使用getline函数。