以下是将大字母转换为小写字母的代码,反之亦然。
#if SOL_2
char ch;
char diff = 'A' - 'a';
//int diff = 'A' - 'a';
fputs("input your string : ", stdout);
while ((ch = getchar()) != '\n') {
if (ch >= 'a' && ch <= 'z') {
ch += diff;
}
else if (ch >= 'A' && ch <= 'Z') {
ch -= diff;
}
else {}
printf("%c", ch);
}
#endif
以上代码代替char diff = 'A' - 'a'
,我使用int = 'A' -'a'
,结果相同。因此,我认为使用字符可以节省内存,因为char
是一个字节,但int
是四个字节。我想不出它的其他优点。
如果你让我了解它的其他优点,我将不胜感激。
使用char
存储字符值的主要原因是什么?
这是因为内存大小问题?
答案 0 :(得分:8)
您应该使用int ch
和int diff
。
getchar()
返回int
,而不是char
。因此ch
必须为int
。这样您就可以区分文件结尾和字符0xff
,这两者在签名字节中都是-1
。 (reference)char
可能是signed
或unsigned
(请参阅this answer)。因此,您应该使用int
进行比较,以便知道您有负值的余地(int
is signed by default)。要回答您的具体问题,请在知道自己有字节数据时使用char
,是的,您很可能会节省一些内存。使用char
(或wchar_t
或其他字符类型)的另一个原因是让读者明白您希望这些数据是文本而不是数字,如果确实是这样的话。 char
的另一个用例是访问文件或其他数据流的各个字节。
答案 1 :(得分:1)
使用
char
存储字符值的主要原因是什么?这是因为内存大小问题?
将char
与int
与数组和序列字符一起使用的主要用途是空间(以及广泛的计算机上的处理速度)体系结构)。如果代码使用限制为8位范围的字符,则过大的数据类型会减慢速度。
对于单个类型的实例,int
通常更好,因为它通常是处理器优化的“本机”类型。
然而,对单个char
vs int
进行优化(假设两者都在应用程序中工作)通常不能充分利用您的时间。担心更大的问题,让编译器优化小东西。
请注意,int getchar()
会在unsigned char
和EOF
范围内返回值。这些通常257个不同的值无法明确存储在char
中。使用int
C提供isupper()
,islower()
,toupper()
,tolower()
,是处理简单字符大小写转换的强大方法。
if (isupper(ch)) ch = tolower(ch);
使用示例:
int ch;
while ((ch = getchar()) != '\n' && ch != EOF) {
if (isupper(ch)) {
ch = tolower(ch);
}
else if (islower(ch)) {
ch = toupper(ch);
}
printf("%c", ch);
}
fflush(stdout);
使用ASCII,EBCDIC以及我遇到的每个小字符编码,可以通过简单切换来完成A-Z大小写转换。注意没有神奇的数字。
ch ^= 'A' ^ 'a';
使用示例:
int ch;
while ((ch = getchar()) != '\n' && ch != EOF) {
if (isalpha(ch)) {
ch ^= 'A' ^ 'a';
}
printf("%c", ch);
}
fflush(stdout);
答案 2 :(得分:1)
是的,你指出我们在char中使用的字符只是1字节的二进制代码,即256个数字,二进制中的每个数字代表映射到字符的数字(可能不是所有二进制数字代表它所依赖的不同字符您使用哪种编码)参考unicode编码,不要只考虑英语考虑其他语言字符以及chinesse或hindi ......等等。因此,这种语言中的每个字符都需要用标准化的数字来表示通过unicode
所以重点是当你使用java的char时它只包含一部分只有英文字母的字母,但是当你开发一个能够选择不同语言显示的国际软件时,你应该使用int。但是,如果你的范围只有英语,那么char将是最好的选择,因为当你使用int时它消耗了更多的未使用位的位,这些位被填充为零,这只是额外的位,没有任何意义来匹配int的长度< / p>
假设您在编辑器中打开了一个中文语言文本,如记事本,如果字符编码设置为ASCII,ascii有一个小字符集,只有英文AZ,az,0-9,空格,换行符......就像256个字符,您将在文件中看到有线字符,就像二进制文件一样,查看您需要将编码更改为UTF-8的文件的实际内容,使用unicode字符集,现在您可以看到文本
答案 3 :(得分:0)
阅读标准6.3.1.8 Usual arithmetic conversions和6.3.1.1 Boolean, characters, and integers。
如果int可以表示原始类型的所有值[...],则该值将转换为int;
在
char c1 = 'A', c2 = 'Z';
c2 - c1; // expression without side effects
上面的表达式,在执行减法之前,x
和y
都会转换为int
。