【问题标题】:Increment a char in C在 C 中增加一个字符
【发布时间】:2020-03-16 11:54:47
【问题描述】:

我对在 c 中增加一个字符有点不理解。 假设:

char c = 'A';

现在如果我执行c+1c 中的值将是'B'。这可以。 但是为什么当我执行以下操作时:

c = c + argv[1][2]

那我在c 中得到了'r',为什么?

请假设参数是"in12345",那么argv[1][2]等于1

我想要做的是一些输入,假设 ABCDEF 是在我以循环方式从参数中接收 BDFHJG 时接收 BDFHJG。但我不明白为什么上述方法对我不起作用。

为什么它不工作,我可以做些什么来解决它?

【问题讨论】:

  • 'A' + '1''A' + '3' 到底有什么意义?
  • argv[1][2] 等于 字符值 '1',而不是整数值 1。您正在将字符 (ASCII 49) 的编码值添加到 c
  • @JohnBode 请使用答案部分,而不是 cmets 部分来回答问题。干杯

标签: c char digits


【解决方案1】:

请假设参数为in12345,则argv[1][2]等于1。

不,不是。它等于'1',或(假设为ASCII)49。

'A' (65) + '3' (49) = 'r' (114)

如果要从字符'1'中得到整数1,则需要进行转换。演员表无济于事;一种方法是使用一些算术魔法:

char c = 'A';

const int valToAdd = argv[1][2] - '0';
c = c + valToAdd;

// c is now 66, or `'B'`

但是,这有点小技巧,如果argv[1][2] 不在'0''9' 的范围内,它就会中断。您可以进一步研究从 ASCII 数字中获取整数的最佳(更好?)方法。

【讨论】:

  • 我用 fputc(argv[1][2],stdout) 检查我自己,我得到了 1
  • @JohnD 您在屏幕上看到了“1”,因为这是 ASCII 字符在屏幕上的显示方式。那不是一回事。
  • 那我怎么才能得到 1 而不是 '1'?即使转换为 int 也不起作用
  • @JohnD (argv[1][2] - '0'),但我建议您检查以确保它是数字字符 first (isdigit)。否则,这种表达方式毫无意义。
  • 听起来您需要查看char 的整数值(例如 ASCII 码)和它在屏幕上的表示方式(作为文本)之间的区别。加入演员阵容不会做任何事情。
【解决方案2】:

'1' 不是数字 1 只是 49,因为它是字符 '1' 的 ASCII 码。

所以你添加的不是1,而是49

【讨论】:

    【解决方案3】:

    "in12345" 是由字符“i”、“n”、“1”、“2”等组成的字符串。例如,“1”不是数字。这是一个字符。所以在这个表达式中

    c = c + argv[1][2] 
    

    你真的有

    c = c + '1'
    

    字符 c 与字符 '1' 的内部表示相加,在 ASCII 表中其值为 49

    例如,要将字符 '1' 转换为整数值 1,您可以这样写

    c = c + ( argv[1][2] - '0' ) 
    

    或者只是

    c += argv[1][2] - '0'
    

    【讨论】:

      猜你喜欢
      • 2022-12-05
      • 2013-05-22
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多