这些符号怎么可能一个比一个大呢?或者我不明白什么?你能解释一下这个代码的作用吗



可以相互比较符号吗?

#include <iostream>
using namespace std;// For Example, Why if "k = 4" it outputs "r o" ? //
int main() {
char word[] = "programming";
int k;
cin >> k;
for (int i = 0; i < k; i++)
if (word[i] > word[i + 1]) {
cout << word[i] << endl;
}
}

char数据类型是积分类型,这意味着基础值存储为整数。此外,char变量存储的整数是整数作为ASCII字符。

ASCII指定了一种将英文字符(以及其他一些符号(映射到0127之间的数字的方法。也就是说,每个英文字符(以及其他一些符号(都有一个介于0127之间的对应数字。这个数字被正式称为代码点

例如,英文字符a的代码点是97。类似地,英文字符H的代码点是72。你可以在这里找到所有字符的代码点列表。

这里需要注意的重要一点是,char变量的基本值存储为整数。让我们举几个例子来澄清这一点,

char var1 = 'a'; //here var1 is stored as the integer 97 
char var2 = 'H'; //here var2 is stored as the integer 72

在上面的片段中,var1被存储为整数97,因为英文字符a的代码点是97。类似地,var2被存储为整数72,因为英文字符H对应于代码点72


现在让我们回到您最初的问题。特别是k =4时会发生什么。

对于k = 4for循环将被执行4次。

迭代0:此处为i = 0

if块基本上翻译为:

if (word[0] > word[0 + 1]) {
cout << word[0] << endl;
}

即:

if ('p' > 'r') {
cout << 'p' << endl;
}

即(使用ascii表(:

if (112 > 114) {
cout << 'p' << endl;
}

由于if内部的条件是false,因此if块的主体将不会被执行,也不会得到任何输出。

迭代1:此处为i = 1

if块基本上翻译为:

if (word[1] > word[1 + 1]) {
cout << word[1] << endl;
}

即:

if ('r' > 'o') {
cout << 'r' << endl;
}

即(使用ascii表(:

if (114 > 111) {
cout << 'r' << endl;
}

由于if内部的条件是true,因此将执行if块的主体,并且您将获得r作为输出(后面跟着一个换行符(。

迭代2:此处为i = 2

if块基本上翻译为:

if (word[2] > word[2 + 1]) {
cout << word[2] << endl;
}

即:

if ('o' > 'g') {
cout << 'o' << endl;
}

即(使用ascii表(:

if (111 > 103) {
cout << 'o' << endl;
}

由于if内部的条件是true,因此将执行if块的主体,并且您将获得o作为输出(后面跟着一个换行符(。

迭代3:此处为i = 3

if块基本上转换为:

if (word[3] > word[3 + 1]) {
cout << word[3] << endl;
}

即:

if ('g' > 'r') {
cout << 'g' << endl;
}

即(使用ascii表(:

if (103 > 114) {
cout << 'g' << endl;
}

由于if内部的条件是false,因此不会执行if块的主体,也不会得到任何输出。

因此,你得到了输出:

r
o

可以相互比较符号吗?

是的,可以。

为什么如果"k=4〃;它输出"0";r o">

字符类型是整数。字符类型的每个整数值都映射到一个符号1。这种映射称为字符集或字符编码。

在运行程序的系统的字符编码中,映射到符号"r"的字符的值比映射到字符"o"的字符大,而"o"字符的值则比映射到"g"的字符小。


1这是一种简化。有一些特殊的不可打印字符,如null终止符,它们本身并不是符号。此外,在可变长度编码(Unicode(的情况下,映射并不是那么简单。

相关内容

  • 没有找到相关文章

最新更新