我有一系列字符串,每个字符串都有字母,空格,数字和$。我似乎无法弄清楚如何得到$后面的数字?例如,
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
任何帮助表示赞赏!
答案 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)
#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;
}