【问题标题】:c programming Ascii values [closed]c编程Ascii值
【发布时间】:2013-07-04 05:17:41
【问题描述】:

假设英文字母 A 到 Z 的值从 1 开始。A = 1、B = 2、C = 3 等等。编写一个程序,该程序调用一个函数,该函数接受一个人的姓名,该姓名是一个常量字符数组,并返回一个带有字母总和的整数值。将人名作为 const char 数组传递有什么好处?

【问题讨论】:

  • 好吧,否则你将如何传递一个只读字符串?
  • 这不是在做你的功课。请告诉我们,到目前为止您已经尝试了什么,以及您遇到的问题。
  • 我们可以通过给A 赋值65 而不是1 来大大简化这个程序。
  • A=65 仅在 ASCII 中(好吧,是这么问的),但您也需要注意 EBCDIC :-)
  • 你会给“Noël”这个名字赋予什么价值

标签: c char ascii


【解决方案1】:

假设其他人为我提供了一个接受非常量 char * 并完成这项工作的函数。函数实际实现的是这样的:

int get_int_sum(char *name)
{
    int sum;
    //codes to calculate sum of alphas
    name[0] += 1;
    //continue
    return sum;
}

当我调用函数时使用

char my_name[] = "Yu Hao";
int reuslt = get_int_sum(my_name);

即使我得到了我想要的结果,my_name 也会在没有我通知的情况下更改为"Zu Hao"。但是,如果一个函数的原型是

int get_int_sum(const char*name)

我确定我传递的字符串不会被修改。

【讨论】:

  • @MrLister 也许改为"Zu Hao",因为我们在字符值上加一而不是减一。但谁在乎?关键是它可以改变,我们不希望这样。再说了,为什么会“还垃圾”呢?
  • @MrLister 讨论修改后的字符串是没有意义的,因为 C 标准不保证 Z 的字符代码在 Y 的字符代码之后。另外,您老实说认为// codes to calculate sum of alphas 部分在示例中代表什么?
  • @Mr Lister Right。但这显然是一个错字。
  • @YuHao 对不起,但是正如我所说,OP 是一个新手,这可能对你我来说显然是一个错字,但对于初学者来说会很困惑。无论如何,你纠正了错误,所以我现在可以放心地投票了。
【解决方案2】:

一个优点是数组中的元素不受更改其值的影响。
例如,这里是简单的代码。

int Your_function(const char * a)
{
    a[3]    =   'A'; // this statement causes compile error.
    // do something
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    相关资源
    最近更新 更多