分隔符后的C语言strtok()特定元素

时间:2015-07-14 02:55:10

标签: c arrays string strtok

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

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

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:1)

有很多可行的方法。

  • 您熟悉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)?";

这些可能使你的生活变得复杂。您也可以决定不用担心它们。

答案 1 :(得分: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;
}