ascii 相关问题

基于英文字母排序的字符编码方案。 ASCII代表美国信息交换标准码。

为什么我无法使用 ASCII 值检查字符串中的特殊字符?

当我使用通过显式给出符号来检查字符串中的特殊字符的函数时,我的代码实际上运行得很好: int isSpecialCharacter(char str[], int n) { for(int i=0; i 当我使用通过显式给出符号来检查字符串中的特殊字符的函数时,我的代码实际上运行得很好: int isSpecialCharacter(char str[], int n) { for(int i=0; i<n;i++) { if (str[i] == '!' || str[i] == '@' || str[i] == '#' || str[i] == '$' || str[i] == '%' || str[i] == '^' || str[i] == '(' || str[i] == ')') { return 1; } return 0; } } 但是,在下面的代码中,我无法让我的代码使用 ASCII 值查找字符串中的特殊字符。我想了解我做错了什么。在下面的代码中,我还包含了我的main(),提示用户输入字符串。 #include <stdio.h> #include <string.h> char str[30][30]; char test[100]; int myindex = 0; int isSpecialCharacter(char str[], int n) { for(int i=0; i<n;i++) { if (str[i] == 33 || str[i] == 35 || str[i] == 36 || str[i] == 37 || str[i] == 40 || str[i] == 41 || str[i] == 64) { return 1; } return 0; } } int main() { printf("Please enter 10 strings below: \n"); while(myindex < 10) { printf("Enter string %d: ", myindex+1); fgets(str[myindex], 500, stdin); strcpy(test, str[myindex]); int t_size = strlen(test); if (strlen(str[myindex])<2||strlen(str[myindex])>26) { printf("Enter string that is between 2 and 25"); continue; } else if(isSpecialCharacter(test, t_size) == 1) { printf("Your string has some special characters. \n"); continue; } else { myindex++; } } return 0; } 编辑: 我已经包含了变量声明并替换了使用符号检查特殊字符的代码。谢谢你。 编辑2: 这些是我想要查找的字符::'!'、'@'、'#'、'$'、'%'、'^'、'(' 或 ')'。 没有空格。 您的两个函数都无法按照您编写的方式运行。 主要问题是 for 循环在每个循环周期后返回,因此您永远不会检查第一个周期之后的情况。 您应该将 return 0 语句移至函数末尾,然后它将按预期工作。 int isSpecialCharacter(char str[], int n) { for (int i = 0; i < n; i++) { if (str[i] == 33 || str[i] == 35 || str[i] == 36 || str[i] == 37 || str[i] == 40 || str[i] == 41 || str[i] == 64) { return 1; } } return 0; } 测试 我已经使用以下输入测试了该解决方案: test1 test2 test) test( test3 test4 test5 test@ test6 test7 test! test8 test9 test10 而且它有效。您可以在那里看到结果:https://godbolt.org/z/67Px14z75 正如评论部分中其他用户的建议,使用十进制值来引用字符是一种不好的做法™,您应该坚持使用 '@' 表示法。 您的return 0;不正确: int isSpecialCharacter(char str[], int n) { for(int i=0; i<n;i++) { if (str[i] == '!' || str[i] == '@' || str[i] == '#' || str[i] == '$' || str[i] == '%' || str[i] == '^' || str[i] == '(' || str[i] == ')') { return 1; } return 0; } } 在第一个循环中,您的函数返回 1 或 0。如果循环完成而没有找到您要查找的字符,您只想返回 0 (false)。 int isSpecialCharacter(char str[], int n) { for(int i=0; i<n;i++) { if (str[i] == '!' || str[i] == '@' || str[i] == '#' || str[i] == '$' || str[i] == '%' || str[i] == '^' || str[i] == '(' || str[i] == ')') { return 1; } } return 0; } 其他人注意到函数中 return 0; 的位置不正确。 使用全局变量不是必需的,并且可能会导致混乱。 正确:int main( void );错误:int main()。 深入挖掘: char str[30][30]; /* Skipping ahead */ printf("Enter string %d: ", myindex+1); fgets(str[myindex], 500, stdin); 不是有效的 C 程序。该代码展示了 UB。 不要在代码中使用(不正确的)“幻数”。 我不会尝试编写你的代码... if( isSpecialCharacter() ) 相当于: if( strpbrk( test, "abqmz" ) != NULL ) (除了后者已被证明有效...) 如果字符串中出现 'a'、'b'、'q'、'm' 或 'z',则 if 条件为真。 学习标准库,而不是花时间重新发明它。 旁白:你的函数名称应该是hasSpecialChars(),因为它扫描一个字符串。它不仅仅测试单个字符。 既然您已经解码了十进制 ASCII 值,那么经验丰富的程序员可能会如何编写该功能。 (不要指望读者必须通过打印的 ASCII 表来解码您的代码。将这个练习留给Mark Watney之类的人。) char spcl[] = "!@#$%^()"; if( strpbrk( test, spcl ) != NULL ) { /* Do something because condition is true */ 如果您需要在字符串中使 \ 或 " 变得特殊,则必须使用额外的反斜杠来 转义 这些字符。例如: char spcl[] = "\\!@#$%^(\")"; // notice '\\' and '\"" 如果这看起来太像“糟糕的语言”,您可以构造自己的字符串(确保(!)它以 null 结尾。) char spcl[] = { '\\', '!', '@', '#', '$', '%', '^', '(', '\"', ')', '\0' }; 故事的寓意:在字符串中搜索某个字符或一组字符中的一个是一种常见操作。花在“自己开发”上的时间应该花在学习和使用标准库的经过验证的函数套件上。这个问题及其几个答案是不需要的。 “return 0”位置不正确。 它应该在“for循环”结束之后出现

回答 4 投票 0

使用 Python 在 Maya 中打开 .ma 文件 (ASCII)?

我正在尝试在Python脚本末尾打开一个maya场景.ma, 路径如下所示:G:\ProjectPath\Scene.ma。 但我知道的唯一命令是 MEL 命令: 文件-f-选项“v=0;...

回答 2 投票 0

lua - string.byte 用于非 ascii 字符

我想将字符转换为数字代码,所以我尝试了string.byte(“å”)。然而,对于这类字符,string.byte()的返回值似乎是195; 有什么方法可以得到一个数字

回答 2 投票 0

VB.NET 将 Unicode 8 (UTF8) 转换为常规美国 ASCII

我这里有问题是调试输出 “?ufn74tn5187r&key=6e6e0936c4e6c48be56a72eba8964df0” 应该 “?u=83n74tn5187r&key=6e6e0936c4e6c48be56a72eba8964df0” ...

回答 1 投票 0

Code39 完整 ascii

我正在尝试配置条形码code39完整的ascii,除了字符#之外,它似乎工作正常,我尝试过字体libre条形码代码39,azalea字体和条形码39,都具有相同的结果。当他...

回答 1 投票 0

从ascii值创建图像

我是 Base64 图像的新手。我有一个问题,IE8 或更低版本不完全支持 base64 图像,限制为 32Kb。 最后,我得到了一个将base64图像转换为ascii的函数...

回答 2 投票 0

RFID WL-134A 十六进制解码 Arduino

我有一个动物标签阅读器连接到Arduino模块,并且由于用户red_car而成功读取数据,但我遇到了标签ID不正确的问题,它似乎通过了

回答 1 投票 0

断行空格和非断行空格ascii字符之间的区别

我在javascript中有两个相同的字符串,其中有一些空格。当我使用 str.charCodeAt(n) 打印 ascii 值时,它显示的值为 32 和 160。我用 google 搜索了这些值,它显示...

回答 3 投票 0

Java。文件编码是否会影响纯字节级别的文件比较?

我使用以下内容来比较两个假定相同的文件的内容。我读过——至少对于文本文件,如 TXT 或 HTML——文件的编码会影响文件的

回答 1 投票 0

计算机/微处理器如何理解程序员编写的助记符(汇编语言)?

我正在读 Ramesh Goankar 写的《微处理器架构、8085 编程和应用》一书。在那里我遇到了处理如何组装的部分

回答 1 投票 0

打印其中包含空格的字符串数组

我想输入一个字符串,将它们转换为小写或大写并打印它们。到目前为止,我已经成功地实现了这一点。现在,我想修改我的程序,以便如果我...

回答 1 投票 0

如何在dart(flutter)中将字符转换为整数ascii数字?

我想将一个字符转换为该 ascii 数字,例如转换 Z => 90。 我知道它的反面,但我找不到这个。确切地说,我想将输入的值移动到两个字符上方。 例如...

回答 1 投票 0

这个 C++ 手动字符串索引器如何工作?

我对 C++ 还很陌生。此代码作为使用 Lambda 为字符串建立索引的示例提供。 IE。字符串“123”变为 unsigned int 123。 我的问题是主要的 for 循环,以

回答 1 投票 0

脱字符号 ASCII 控制代码列表(即 ^[[101;6u)

如何找到特定组合键的插入符号控制代码?有列表或表格吗?我正在寻找 Ctrl + Shift + C、Ctrl + Shift + X 和 Ctrl + Shift + V。 Ctrl + Shift + E...

回答 1 投票 0

为什么下面的C代码会进入死循环?

#包括 int main() { 对于(字符c=0;c<128; c++) { printf("%c", c); } } The output of the code prints the whole character list over and over again. But I also...

回答 1 投票 0

检测发送文本所需短信数量的最佳方法

我正在寻找 php 中的代码/lib,我将调用它并向其传递文本,它会告诉我: 我需要使用什么编码才能将此文本作为短信发送(7,8,16 位) 有多少条短信...

回答 3 投票 0

从 pcap 文件中提取数据

我正在尝试从 .pcap 文件中提取 NetFlow 记录,但是数据以不可读的格式出现,如下面的附图所示。 我不确定如何将其转换为可读的...

回答 1 投票 0

将 EBCDIC 可打印文件就地转换为 ASCII 的 C 代码

C 中将 EBCDIC 编码字符串就地转换为其等效 ASCII 的最简单方法是什么。 唯一需要转换的字符是空格、字母数字和集合中的 <...

回答 4 投票 0

Dart:如何将十六进制字符串转换为 Ascii 字符串

需要一些帮助将十六进制字符串转换为 Ascii 字符串。 我正在使用这里的示例函数 示例十六进制 = 20354653474955 我收到此错误: [错误:flutter/runtime/dart_vm_initializer.cc(41)]

回答 1 投票 0

Ruby 中字符的 ASCII 值

在 Ruby 1.9 中如何获取字符的 ASCII 值? 我在互联网上进行了广泛的搜索,但没有成功。 我尝试了 ?x 和 "x"[0],但它们返回的只是 "x"。

回答 4 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.