C语言 strtok() 分隔符后的特定元素
C language strtok() specific element after delimiter
我有一系列字符串,每个字符串都有字母、空格、数字和 $。我似乎无法弄清楚的是如何获得 $? 之后的数字?例如,
char s[50]= "I have and 3 hours left to work.";
char t[50]= "He might have 4 left but does have .";
char u[50]= " and 30 equal 59 dollars.";
/* I'm assuming strtok, since it makes the most sense to me */
预期输出
20
7
29
感谢任何帮助!
有很多可能的方法。
- 你熟悉
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 .0000001";
char nasty3[] = "And $ 20 is too spaced out";
char nasty4[] = "Negative balances? $-20 or - or () or $(20)?";
这些可能会使您的生活复杂化。您也可以决定不需要担心它们。
#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 and 3 hours left to work.";
char t[50]= "He might have 4 left but does have .";
char u[50]= " 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;
}
我有一系列字符串,每个字符串都有字母、空格、数字和 $。我似乎无法弄清楚的是如何获得 $? 之后的数字?例如,
char s[50]= "I have and 3 hours left to work.";
char t[50]= "He might have 4 left but does have .";
char u[50]= " and 30 equal 59 dollars.";
/* I'm assuming strtok, since it makes the most sense to me */
预期输出
20
7
29
感谢任何帮助!
有很多可能的方法。
- 你熟悉
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 .0000001";
char nasty3[] = "And $ 20 is too spaced out";
char nasty4[] = "Negative balances? $-20 or - or () or $(20)?";
这些可能会使您的生活复杂化。您也可以决定不需要担心它们。
#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 and 3 hours left to work.";
char t[50]= "He might have 4 left but does have .";
char u[50]= " 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;
}