- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在编写一个函数来解析包含掷骰子描述的字符串,例如“2*1d8+2”。当它们是整数时,我提取四个值 OK,但我希望能够将 float 也用于乘数和最后的加法。当我尝试解析这样一个字符串时,事情变得很糟糕:“1.8*1d8+2.5”。
我确定问题出在函数 strcspn
上.我要求它解析输入字符串 s
(包含骰子字符串)并在星号或“x”处停止:
const char * s = "1.8*1d8+2.5";
size_t l = strcspn(s,"*x");
函数应该返回 3
,因为星号位于第 4 个位置。但是,它似乎停在小数点分隔符(句点)上并返回 1
.
这并不是说没有这个我就不能继续编写我的函数,因为还有其他方法可以完成任务,但我仍然很好奇为什么会发生这样的事情。以前有人遇到过这个问题吗?
[编辑]
没关系,我找到了答案,这是我的愚蠢,而不是编译器在捉弄我。我使用了这段代码:
if (l = strcspn(s,"*x") < strlen(s)) {
...
返回了 1
(或 true
)因为 strcspn(s,"*x") < strlen(s)
评估为 true
- 并被分配给 l
多变的。我应该添加括号:
if ((l = strcspn(s,"*x")) < strlen(s)) {
...
尽管如此,还是感谢您的回答,尤其是@sleske,是他让我更深入地分析了我的代码(从而找到了答案)。
最佳答案
一定是别的地方出错了。我写了一个测试程序:
#include <stdio.h>
#include <string.h>
void main(){
const char * s = "1.8*1d8+2.5";
size_t l = strcspn(s,"*x");
printf("l: %d\n", l);
}
并在 Linux 上用 gcc
编译。在我的系统上,它输出“3”。
请发布一个完整的工作示例来展示问题。然后我们会看到...
关于c - strcspn() 在一段时间内停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4010312/
我正在编写一个函数来解析包含掷骰子描述的字符串,例如“2*1d8+2”。当它们是整数时,我提取四个值 OK,但我希望能够将 float 也用于乘数和最后的加法。当我尝试解析这样一个字符串时,事情变得很
我似乎无法在任何地方找到它,但是当 str1 不包含 str2 时,strcspn() 是否返回 -1?例如,假设我有: strcspn(argv[1], " "); 如果 argv[1] 不包含空格
我必须弄清楚我的主题字符串是否有任何不良字符(一些我绝对讨厌的字符)。因此,如果我有一个名为 str(char *str) 的字符串,并且如果找到字符串 bad(char *bad) 中的任何字符,则
strspn("string", "chars") 给出由 "chars"中的字符组成的字符串中初始跨度的长度,而 strcspn("string", "chars") 给出由不在“chars”中的字
strspn("string", "chars") 给出由 "chars"中的字符组成的字符串中初始跨度的长度,而 strcspn("string", "chars") 给出由不在“chars”中的字
所以我正在制作一个可以获取 10 个名称的函数。我尝试使用 strcspn() 从字符串末尾删除\n 。但是我收到了这个警告。 #define NUM_OF_NAMES 10 #define STR_
我正在使用此函数从字符串中删除换行符: void remove_newline(char *string) { string[strcspn(string, "\r")] = "\0";
char * strpbrk (char * str1, const char * str2 ); 返回指向 str1 中第一次出现的任何属于 str2 的字符的指针,如果没有匹配则返回空指针。 in
我在 Visual Studio 2012 中遇到了 strcspn() 的奇怪问题。 当我将以下代码编译为 32 位 Win32 控制台应用程序时,我得到了预期的结果 6。 #include #i
我正在尝试将登录功能作为较大程序的一部分,这是简化版本: #include #include #include #include int main() { char username[
我是一名优秀的程序员,十分优秀!