【问题标题】:C language strtok() specific element after delimiter分隔符后的 C 语言 strtok() 特定元素
【发布时间】:2015-07-14 02:55:10
【问题描述】:

我有一系列字符串,每个字符串都有字母、空格、数字和 $。我似乎无法弄清楚如何获得 $ 后面的数字?例如,

char s[50]= "I have $20 and 3 hours left to work.";
char t[50]= "He might have 4 left but does have $7.";
char u[50]= "$29 and 30 equal 59 dollars.";
/* I'm assuming strtok, since it makes the most sense to me */

预期输出

20
 7
29

任何帮助表示赞赏!

【问题讨论】:

  • 简单,使用 stdio.h 和 string.h 中的函数。我猜你还没有尝试过。 (我们不会为你写代码。)
  • 使用strchr 然后sscanf
  • 你尝试了什么,得到了什么结果?你熟悉sscanf()吗? strtod()strtol() 呢?美元金额是什么类型(整数或浮点数)?您可以使用strchr()strstr() 代替strtok() — 或者,实际上,strcspn()strpbrk()。请创建一个 MCVE (How to create a Minimal, Complete, and Verifiable Example?),显示您所做的工作并显示您获得的输出,并解释您对所获得结果的不理解。
  • @this duh,我不需要你为我写代码我只是不知道BLUEPIXY提到的功能。
  • @JonathanLeffler 我会看看所有这些。谢谢,下次我会创建一个 MCVE。 stackoverflow 还是新手

标签: c arrays string strtok


【解决方案1】:

strchrsscanf 采样

#include <stdio.h>
#include <string.h>

void print(int val){
    printf("%d\n", val);
}

void get(const char *s, void (*callback)(int)){
    int value;
    while((s = strchr(s, '$')) != NULL){
        if(1==sscanf(++s, "%d", &value)){
            callback(value);
        }
    }
}

int main(void){
    char s[50]= "I have $20 and 3 hours left to work.";
    char t[50]= "He might have 4 left but does have $7.";
    char u[50]= "$29 and 30 equal 59 dollars.";

    char *a[] = { s, t, u};

    for(int i = 0; i < sizeof(a)/sizeof(*a); ++i){
        get(a[i], print);
    }
    return 0;
}

【讨论】:

    【解决方案2】:

    有很多可能的方法来做到这一点。

    • 你熟悉sscanf()吗?它可以用来完成这项工作(但它不是sscanf() 的最简单用法)。
    • 你熟悉吗 strtod() 将字符串转换为 double,或 strtol() 将字符串转换为long?或者他们更简单的对应物 atof()atoi()?
    • 您可以使用strchr()strstr() 而不是 strtok()strtok() 的一个缺点是它具有破坏性且不提供信息——它会破坏一个分隔符并且不会告诉您它找到了哪个分隔符。这意味着您不能在字符串文字上使用strtok()
    • 您也可以使用strcspn()strpbrk() 代替 strchr()

    这些组合——sscanf() 本身,或搜索功能之一加上sscanf(),或搜索功能之一加上转换功能之一——可以完成这项工作。

    你想从这些字符串中得到什么?

    char nasty1[] = "Who writes $$ 20 and hopes to be OK?";
    char nasty2[] = "He should have written one $, like $20.0000001";
    char nasty3[] = "And $ 20 is too spaced out";
    char nasty4[] = "Negative balances?  $-20 or -$20 or ($20) or $(20)?";
    

    这些可能会使您的生活复杂化。您也可以决定不必担心它们。

    【讨论】:

      猜你喜欢
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多