【问题标题】:How to replace letters in a string with specific integer values?如何用特定的整数值替换字符串中的字母?
【发布时间】:2015-08-04 11:57:19
【问题描述】:

我编写了一个 C 程序,其中包含一个看起来像这样的字符数组“long_string”。

 long_string[16] = "AHDAHDAHDAHDAHDA";

我希望将字符串中的字母替换如下: A-0、H-1、D-2。

有人能告诉我如何做到这一点吗?我试图在网上查看,但大多数情况显示字母到 ASCII 值的转换,这不是我需要的。提前感谢您的时间:)

【问题讨论】:

  • 明确地说,您希望此字符串转换为"0120120120120120120"?
  • SO 不是代码编写服务。请展示你自己做了什么。有很多网站提供简单的替换算法。
  • 你应该尝试一下,如果你确实被卡住了,再来发布你尝试过的代码,你期望它做什么,它做了什么/你得到了什么编译器错误/它在哪里在运行时崩溃。如果你真的不知道如何尝试它,那么你应该为自己找到一个真正的 C 学习资源。
  • @Goldengirl 重要的是要知道字符 '1' 和 C 中的整数 1 之间的区别。我提到这一点是因为您将 0、1、2 称为“整数”标题,而您的问题听起来像是您想要 characters 代替。
  • 只是一个提示:不要想到“替换”,而是“按照给定的命令构建一个新字符串”

标签: c string replace char int


【解决方案1】:

按照您定义字符串的方式,它不会以空值终止(16 也不足以适应空值终止符)。除此之外,您想要的应该相当简单:

int i = 0;
char long_string[] = "AHDAHDAHDAHDAHDA";
int len = strlen(long_string);
for(i = 0; i<len; i++)
{
  if(long_string[i] == 'A')
   long_string[i] = '0';
  else if(long_string[i] == 'H')
   long_string[i] = '1';
  // etc.
}

【讨论】:

  • 如果/否则如果“丑陋”。在这种情况下,开关会更好。
  • @MiguelCunha:见仁见智。
【解决方案2】:
int i = 0;
for( ; i < size ; i++ ){

  switch( long_string[i] ){
    case 'A':
      long_string[i] = '0';
      break;
    // and so on...
  }

}

【讨论】:

  • 这是一种硬编码的方式。如果还有其他字母,这将无法解决问题
  • 什么? A值是0。H值是1。D值是2。M值是他想要的……他需要为字母定义值……
  • 我猜 OP 想要的是一种分配这些值的通用方法。这些值将在输入字符串时决定,并根据该字符串。
  • 没有。题目是“如何用具体的整数值替换字符串中的字母?”,所以具体的值意味着他需要告诉程序具体的值是什么……
【解决方案3】:

如果你想翻译大写的 alpha 字符,你可以使用一个查找表并将它的 char 值减去 'A' 进行索引,例如:

                  //ABCDEFGHIJKLMNOPQRSTUVWXYZ
const char xlat[]=("0  2   1                  ");
..
..

newChar=xlat[oldChar-'A'];

或者,对于您似乎想要的,更一般的形式:

const char xlat[]=("\x00\x20\x20\x02\x20\x20\x20\x01\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20");

请注意,将字符转换为包含 '\0' 的集合将使输出数组无法用作 C 样式字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    相关资源
    最近更新 更多