Strtok如何处理新线
How strtok handles newlines?
我试图从包含几行的字符串中读取数据作为令牌。我使用代码
char * pch;
pch = strtok ((char*)MyStr.c_str()," ,|,n"); int i = 0;
while (pch != NULL && i++ < 10)
{
cerr << i << ':' << pch << ' ';
pch = strtok (NULL, " ,.-");
}
输入是
std::string SP1271 = "1271,1n"
"0,44248,8,45040,20,1,0,100n"
"545,590,603,564,566,598,569,585,586,578n";
,输出为
1:1271 2:1
0 3:44248 4:8 5:45040 6:20 7:1 8:0 9:100
545 10:590
使用' n'作为分离器是合法的吗?
使用 strtok()
是一个非常糟糕的主意,因为此功能可能会更改原始字符串,因为它是const
,因此不应该更改。
另外,即使这可以起作用,您也没有在随后的strtok()
循环中预见到令牌分离器。因此,更好地对齐所有令牌分离器字符串。
为什么不使用C 功能:
size_t pe;
for (size_t pb=0; pe=MyStr.find_first_of(" ,-n", pb); pb=pe+1)
{
cout << MyStr.substr(pb, (pe==string::npos ? pe:pe-pb))<< " ";
if (pe==string::npos)
break;
}
相关文章:
- 警告处理为错误这里有什么问题
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用流处理接收到的数据
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 基于多个条件处理地图中的所有元素
- 如何用数字处理log(0)
- SSL上的`curl_easy_send`和`curl_asy_recv`:如何处理`CURLE_AGAIN`
- 错误处理.将系统错误代码映射到泛型
- 从文本文件中读取时钟时间和事件时间并进行处理
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 用于矢量处理的多个线程
- 对字符串进行排序时,在c++中处理sort()
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- Strtok如何处理新线
- 在处理新线程时传递对象的实例作为参数
- 在新线程中处理类时的内存分配问题