- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图仅提取除句子中其他字符之外的字母单词。
为此,我使用两个 scanf() ,如下所示。
scanf("%s", word);
sscanf(word, "%[A-Za-z]", word);
问题是,尽管我将格式设置为 %[A-Za-z],但双引号未被删除然而奇怪的是,如果这个标记位于单词的最后一个位置,它就会被删除。
有谁知道原因吗?
测试用例
- “迪士尼乐园
- 左。”
#include <stdio.h>
#include <string.h>
#define MAX_WORD 128
int main(int argc, char* argv[]) {
char word[MAX_WORD];
/* Read all of contents */
while (EOF != scanf("%s", word)) {
printf("origin word: %s\n", word);
sscanf(word, "%[A-Za-z\"]s", word);
printf("transformed: %s\n", word);
}
}
最佳答案
由于句点而不是引号,它会删除第二行的末尾,因此它会同时删除句点和引号。
您要求它扫描由字母 A-Za-z^"
组成的字符串,因此句点的存在会导致它在该点停止。
我不确定您是否完全理解它是如何工作的。它不会为您提供字符串中与您指定的字符匹配的所有字符,并丢弃其余字符。相反,它会接受第一个有效字符之前的字符,然后丢弃其他所有字符。如果您输入一些完全有效的字符,但中间有一个无效字符,您会看到这一点:
abcdefg.hijklmnop
origin word: abcdefg.hijklmnop
transformed: abcdefg
由此可见,它会停在第一个无效字符处,而不是仅仅删除无效字符。
如果您想要一个仅包含匹配字符的字符串,您可以使用类似以下内容的内容:
#include <stdio.h>
#include <string.h>
#define MAX_WORD 128
static void strip(char *word, char *allow) {
char *d = word;
while (*word != '\0') {
if (strchr (allow, *word) != NULL)
*d++ = *word;
word++;
}
*d = '\0';
}
int main (void) {
char word[MAX_WORD];
while (EOF != scanf ("%s", word)) {
printf("origin word: %s\n", word);
strip (word, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz^\"");
printf("transformed: %s\n", word);
}
}
并且,带有一组示例运行:
"Disneyland
origin word: "Disneyland
transformed: "Disneyland
Left."
origin word: Left."
transformed: Left"
dvsdhjshhvsdf6553785365^%%$$@@#*&*&mjdvsdddhvjhdfvb
origin word: dvsdhjshhvsdf6553785365^%%$$@@#*&*&mjdvsdddhvjhdfvb
transformed: dvsdhjshhvsdf^mjdvsdddhvjhdfvb
关于c - 为什么 scanf() 无法过滤双引号,尽管将格式设置为 [A-Za-z],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27396818/
我需要以下正则表达式,允许 [a-zA-Z]+ 或 [a-zA-Z]+[ \\-]{0,1}[a-zA-Z]+ 所以我想在 a-zA-Z 字符之间允许无限的减号和空格 示例: sdfsdfdsf-sf
我的电子邮件验证脚本中有以下代码。我想了解有关变量reg的更多信息,但不知道如何查找相关信息,因为我不知道其语法叫什么。有人可以引导我找到正确的资源或告诉我这种语法的名称吗? function val
我试图写一个正则表达式来匹配字符串形式: "[A-Za-z][A-Za-z]-[A-Za-z][A-Za-z]_[match all chars]" 我要匹配的字符串必须是这种形式,包括连字符和下划线
正则表达式 ^[A-Za-Z ][A-Za-z0-9 ]* 描述“第一个字母应该是字母表,其余字母可能是字母数字”。但是我怎么也允许特殊字符呢?当我输入“C#”时出现错误。 如何输入特殊字符且首字母应
^[a-zA-Z] 和 [^a-zA-Z] 有区别吗? 当我 checkin C# 时, Regex.IsMatch("t", "^[a-zA-Z]") // Returns true (I thi
我试图让我的 NSScanner 尝试扫描以下正则表达式:[a-zA-Z_][a-zA-Z0-9_]*,但遇到困难。 我可以尝试先读取 a-Z_,然后尝试附加 a-Z0-9_。 我想知道是否有更简单/
我希望能够在没有 Microsoft 语言扩展恶作剧的情况下编译我的 VS2017 C++ 项目。 根据此处的回复,/Za compiler directive does not compile sy
我需要一个满足以下规则的正则表达式: 长度必须介于8-32个字符之间 必须以字母开头 不得包含任何空格 不得包含任何特殊字符 我在google的帮助下尝试了自己的表达式,例如^([a-zA-Z][a-
我有这个用于电子邮件验证的正则表达式(假设只有 x@y.com、abc@defghi.org、something@anotherhting.edu 是有效的) /^[a-zA-Z0-9]+@[a-zA
我正在将 Entity Framework 与 PostgreSQL 结合使用。我需要编写一个遵循这种格式的查询: await Context.Database.ExecuteSqlCommandAs
这个问题已经有答案了: Reference - What does this regex mean? (1 个回答) 已关闭 3 年前。 我刚刚开始使用正则表达式,正在解决这个问题 question其
我正在学习正则表达式,目前看来我很困惑。 val.replace(/^[^a-zA-Z0-9]*|[^a-zA-Z0-9]*$/g, ''); 在上面的表达式中 1) 哪一部分表示不包含空格?因为我试
我正在尝试通过Vagrant Docker规定运行Docker容器: d.run "tomcat:8.0", args: "-it -d -p 8888:8888 --name tomcat8" Va
我知道正则表达式模式必须匹配以以下字符的组合和重复开头的字符串: a-z A-Z 一个空白字符 并且对字符串的结尾方式没有限制! 第一个案例 所以像 uoiui897868 这样的字符串(任何只以空格
如何删除字母而不是数字之间的空格 例如: 输入 I ES P 010 000 000 000 000 000 001 001 000 000 IESP 000 000 输出 IESP 010 000
我正在使用 来确保输入的值仅包含字母表,它工作正常,但不允许在字符串中占用空间。 如何在上述模式中加入空格字符? 提前致谢。 最佳答案 只需将空格添加到正则表达式。 如果您想要任何空格,而不仅仅是
我正在编写一个解决方案,用于扫描 iOS 南非驾驶执照背面的 PDF417 条形码 ( http://en.wikipedia.org/wiki/PDF417 )。我找不到任何有关如何解码条形码的文档
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 6年前关闭。 Improve this questi
我有这个代码; $('[data-question=502] textarea').bind('input propertychange', function() { $(this).val
引用此讨论:Decode South African (ZA) Drivers License 请协助我尝试在 Android 上的 Java 中创建 PublicKey 实例时似乎遇到错误。我已粘贴
我是一名优秀的程序员,十分优秀!