我在C中练习,它从用户那里获取一个字符串(a8 $£de95“)并搜索字母(最小和最大)然后键入最小和最大的字母以及中间的任何字母在这个例子中它应该显示“abcde”,然后在它之后键入2个字母,这些字母已经按顺序排列,在这种情况下它们是“de”。 现在我写了一个基本的程序,以帮助理解角色,因为我之前没有解决任何字符/字符串练习(所有以前的练习只有数字)。我写了
www.otherdomain.com\/users\/[^\\]+\/features\/[^\\]+
但它没有显示任何内容,所以我的问题是,如何从字符串中读取1个字符以及计算机如何知道最小和最大的字母是什么?如何在中间键入字母? 感谢
答案 0 :(得分:1)
什么是最小和最大的字母,以及如何让他在中间键入字母?
您应该知道问题陈述和代码都取决于ASCII字符集的细节,因此它不是可移植的结果。根据这一点没有任何问题,但ASCII不是通用的,并且不能保证在the C Standard中连续表示字母,所以没有简单的方法可以说"之间的字母和" #34 ;.只有数字0
- 9
才有保证。每 5.2.1字符集,C标准第3段:
基本源代码和基本执行字符集 应具有以下成员:26个大写字母 拉丁字母
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
拉丁字母的26个小写字母
a b c d e f g h i j k l m n o p q r s t u v w x y z
10位小数
0 1 2 3 4 5 6 7 8 9
以下29个图形字符
! " # % & ' ( ) * + , - . / : ; < = > ? [ \ ] ^ _ { | } ~
空格字符和控制字符代表 水平制表符,垂直制表符和换页符。该 源和执行的每个成员的表示 基本字符集应适合一个字节。 在源代码和 执行基本字符集,
0
之后每个字符的值 在上面的十进制数字列表中应该大于1 以前的价值。 ......
Letters do not have to be represented consecutively. 'a' + 1
不一定等于'b'
。
识别字母的便携方式是使用isalpha()
功能:
7.4.1.2
isalpha
功能...
isalpha
函数测试isupper
或{。}}的任何字符islower
是真的,或者是任何一个角色 特定于语言环境的字母字符集,其中没有iscntrl
,isdigit
,ispunct
或isspace
为真。在"C"
中 locale,isalpha
仅对其所属的字符返回trueisupper
或islower
是真的。
答案 1 :(得分:0)
您应该查找ASCII表以查看字符在计算机中的表示方式。
#include <stdio.h>
#include <string.h>
int main()
{
char string[100] = "";
int length;
int i;
char largest = 'a' - 1; // Init to a value not in ASCII table
unsigned char smallest = 'z' + 1; // Init to a value not in ASCII table
scanf("%s", string);
length = strlen(string);
for (i = 0; i < length; i++) {
if(string[i] >= 'a' && string[i] <= 'z') {
if(string[i] < smallest) {
smallest = string[i];
}
if(string[i] > largest) {
largest = string[i];
}
}
}
for(i = smallest; i <= largest; i++) {
printf("%c", i);
}
printf("\n");
return 0;
}
基本上我正在做的是检查以确保每个char都在'a'到'z'的范围内,因为C语言中的char实际上是一个8字节整数,因此可以将字符与int进行比较。然后我保存最小和最大的值并在打印时循环它们。