arrays - 如何在令牌之间检索值
问题描述
我有一个关于令牌的问题。我创建了这个程序,它根据标记“[]”分割一个句子。但是,是否有可能检索它之间的字符?例如,我想从输入 [5000] 中检索数字 5000,其中“[ ]”是障碍标记,因此我可以稍后将该数字分配给变量。这是我的代码:
#include <string.h>
#include <stdio.h>
int main () {
char str[ ] = "My balance is [5000]";
const char s[ ] = "[]";
char *token;
token = strtok(str, s);
while( token != NULL ) {
printf( " %s\n", token );
token = strtok(NULL, s);
}
return(0);
}
编辑:基本上我想知道如何将“[]”中的值分配给变量。假设我正在使用 fgets 提示用户键入整个句子,并将其余额放在括号 [] 中。如何创建一个程序来检索括号中的值并将其分配给一个值?
解决方案
考虑使用strchr
来查找[
. 如果未找到,则返回 NULL 或指向[
.
strcspn
可用于定位一个]
. 然后strncpy
提取分隔符之间的字符串。
strtol
也可以用来解析一个数字。它可以给出一个指向尾随字符的指针,在这种情况下是一个]
.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ( void) {
char str[ ] = "My balance is [5000]";
char out[sizeof str] = "";
const char s[ ] = "[]";
char *token;
char *last;
if ( ( token = strchr ( str, s[0]))) {//find [
++token;//advance to next character past [
int count = strcspn ( token, &s[1]);//count characters to ]
if ( token[count]) {//not the terminating zero
strncpy ( out, token, sizeof out);
out[count] = 0;
//printf ( "%.*s\n", count, token);
printf ( "out %s\n", out);
}
else {
printf ( "could not find %c\n", s[1]);
}
long number = strtol ( token, &last, 10);
if ( last == token) {
printf ( "could not parse a number\n");
}
else if ( *last != s[1]) {
printf ( "missing/misplaced delimiter\n");
}
else printf ( "number %ld\n", number);
}
else {
printf ( "could not find %c\n", s[0]);
}
return 0;
}
推荐阅读
- fortran - MPI Fortran 代码的缓冲区指针无效
- events - 使用 GSON 反序列化从 SQS 中提取的对象时遇到问题
- c# - 使用 Ajax 将脚本添加到退出页面。脚本加载,但不能通过 ajax 方法工作?
- c# - DFS 文件夹与 .NET Framework 的奇怪行为
- redux - 如果数据是对象而不是数组格式,如何使用 normalizr 规范化 redux 的数据
- r - 具有可变列名的函数
- android - 有什么方法可以避免!!在 Kotlin 代码中?
- python - Matplotlib.colors.DivergingNorm 的替代品
- r - 在 R 中按其他变量分组时,查找每组具有多个唯一值的列
- c# - 单元测试在 Visual Studio 中随机停止工作。有没有其他人遇到过这个问题,如果有,我该如何解决?