【问题标题】:Find delimiter in strtok()在 strtok() 中查找分隔符
【发布时间】:2021-12-29 15:14:38
【问题描述】:

我是 C 编程新手。 我正在尝试使用 strtok() 拆分字符串,使用多个分隔符。代码行是:

char *token = strtok(st, " +-*/^()");

我想知道它在哪个分隔符处被拆分。是否可以?请帮忙。 我的意思是在这个例子中,令牌是否在空格、加号、减号等处被分割。

【问题讨论】:

  • strtok() 不可能。您必须编写自己的版本,提供捕获匹配字符的方法或使用不同的方法。
  • 哦,好的,谢谢@Shawn。但是有没有其他内置功能可以为我做到这一点?
  • 不适用于strtok,因为它会用字符串终止符覆盖第一个字符匹配。
  • 哦,好的,谢谢@WeatherVane。但是有没有其他内置功能可以为我做到这一点?还是我必须自己制作函数?

标签: c delimiter strtok


【解决方案1】:

函数strtok 将找到的分隔符更改为零字符'\0'。因此无法确定遇到了什么分隔符。

您可以使用函数strspnstrcspn 来代替函数strtok。使用这些函数,您可以确定遇到了什么分隔符。

例如

size_t n = strcspn( st, " +-*/^()" );

if ( st[n] != '\0' )
{
    switch ( st[n] )
    {
    case ' ':
       //...
       break;
    case '+':
       //...
       break;
    //...
    }
}
  

【讨论】:

  • 请不要介意打扰你,但它不是只给出字符和字符串的第一次出现,但是如果我想在循环中重复使用 strtok 怎么办。请帮忙。另外 size_t 是做什么用的?
  • @SuryaMajumder 谁阻止你在循环中使用 strspn 和 strcspn?!
  • @SuryaMajumder size_t 是一个无符号整数类型,用于存储字符串长度。
  • 非常感谢来自莫斯科的@Vlad。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多