比较字符到字符串C.

时间:2015-02-28 22:10:54

标签: c

我需要编写一个程序来接收一个字符并将它与一个数组(ascii表)进行比较

char asciiname[] =
        "NUL\0"  "SOH\0"  "STX\0"  "ETX\0"  "EOT\0"  "ENQ\0"  "ACK\0"  "BEL\0"
        " BS\0"  " HT\0"  " NL\0"  " VT\0"  " NP\0"  " CR\0"  " SO\0"  " SI\0"
        "DLE\0"  "DC1\0"  "DC2\0"  "DC3\0"  "DC4\0"  "NAK\0"  "SYN\0"  "ETB\0"
        "CAN\0"  " EM\0"  "SUB\0"  "ESC\0"  " FS\0"  " GS\0"  " RS\0"  " VS\0"
        " SP\0"  "  !\0"  "  \"\0" "  #\0"  "  $\0"  "  %\0"  "  &\0"  "  '\0"
        "  (\0"  "  )\0"  "  *\0"  "  +\0"  "  ,\0"  "  -\0"  "  .\0"  "  /\0"
        "  0\0"  "  1\0"  "  2\0"  "  3\0"  "  4\0"  "  5\0"  "  6\0"  "  7\0"
        "  8\0"  "  9\0"  "  :\0"  "  ;\0"  "  <\0"  "  =\0"  "  >\0"  "  ?\0"
        "  @\0"  "  A\0"  "  B\0"  "  C\0"  "  D\0"  "  E\0"  "  F\0"  "  G\0"
        "  H\0"  "  I\0"  "  J\0"  "  K\0"  "  L\0"  "  M\0"  "  N\0"  "  O\0"
        "  P\0"  "  Q\0"  "  R\0"  "  S\0"  "  T\0"  "  U\0"  "  V\0"  "  W\0"
        "  X\0"  "  Y\0"  "  Z\0"  "  [\0"  "  \\\0" "  ]\0"  "  ^\0"  "  _\0"
        "  `\0"  "  a\0"  "  b\0"  "  c\0"  "  d\0"  "  e\0"  "  f\0"  "  g\0"
        "  h\0"  "  i\0"  "  j\0"  "  k\0"  "  l\0"  "  m\0"  "  n\0"  "  o\0"
        "  p\0"  "  q\0"  "  r\0"  "  s\0"  "  t\0"  "  u\0"  "  v\0"  "  w\0"
        "  x\0"  "  y\0"  "  z\0"  "  {\0"  "  |\0"  "  }\0"  "  ~\0"  "DEL\0"
        ;

输入将是} ~a,bz \ Z.我需要取每个字符并将其与上面的数组进行比较,如果有匹配则打印出它的十六进制。

#include <stdio.h>
#include <string.h>
#define MAXLINE 1000
int getline1(char s[], int max);
main ()
{
int len, i, j;
char line[MAXLINE];
char asciiname[] =
    "NUL\0"  "SOH\0"  "STX\0"  "ETX\0"  "EOT\0"  "ENQ\0"  "ACK\0"  "BEL\0"
    " BS\0"  " HT\0"  " NL\0"  " VT\0"  " NP\0"  " CR\0"  " SO\0"  " SI\0"
    "DLE\0"  "DC1\0"  "DC2\0"  "DC3\0"  "DC4\0"  "NAK\0"  "SYN\0"  "ETB\0"
    "CAN\0"  " EM\0"  "SUB\0"  "ESC\0"  " FS\0"  " GS\0"  " RS\0"  " VS\0"
    " SP\0"  "  !\0"  "  \"\0" "  #\0"  "  $\0"  "  %\0"  "  &\0"  "  '\0"
    "  (\0"  "  )\0"  "  *\0"  "  +\0"  "  ,\0"  "  -\0"  "  .\0"  "  /\0"
    "  0\0"  "  1\0"  "  2\0"  "  3\0"  "  4\0"  "  5\0"  "  6\0"  "  7\0"
    "  8\0"  "  9\0"  "  :\0"  "  ;\0"  "  <\0"  "  =\0"  "  >\0"  "  ?\0"
    "  @\0"  "  A\0"  "  B\0"  "  C\0"  "  D\0"  "  E\0"  "  F\0"  "  G\0"
    "  H\0"  "  I\0"  "  J\0"  "  K\0"  "  L\0"  "  M\0"  "  N\0"  "  O\0"
    "  P\0"  "  Q\0"  "  R\0"  "  S\0"  "  T\0"  "  U\0"  "  V\0"  "  W\0"
    "  X\0"  "  Y\0"  "  Z\0"  "  [\0"  "  \\\0" "  ]\0"  "  ^\0"  "  _\0"
    "  `\0"  "  a\0"  "  b\0"  "  c\0"  "  d\0"  "  e\0"  "  f\0"  "  g\0"
    "  h\0"  "  i\0"  "  j\0"  "  k\0"  "  l\0"  "  m\0"  "  n\0"  "  o\0"
    "  p\0"  "  q\0"  "  r\0"  "  s\0"  "  t\0"  "  u\0"  "  v\0"  "  w\0"
    "  x\0"  "  y\0"  "  z\0"  "  {\0"  "  |\0"  "  }\0"  "  ~\0"  "DEL\0"
    ;



        while ((len = getline1(line, MAXLINE)) != 0) {
            for(i = 0; i < len;i++){

                        printf("The code %3x represents %s\n", line[i], &asciiname[4*line[i]]);

            }
        }
} 

int getline1(char s[], int max) {
    int i, c;
    for (i=0; i<max-1 && (c=getchar())!=EOF && c!='\n'; ++i) {
        s[i] = c;
    }
    if (c == '\n') {
        s[i] = c;
        ++i;
    }
    s[i] = '\0';
    return i;
}

我是C的新手,似乎无法弄清楚比较在字符和asciiname数组中的字符串之间的作用。任何指针将非常感激。

这是我最终使用的最终代码,感谢下面的帮助。

2 个答案:

答案 0 :(得分:2)

我不知道你为什么这样做,但请查看这个如何操作的例子

#include <stdio.h>
#include <string.h>

char *asciiname[128] = {
    "NUL",  "SOH",  "STX",  "ETX",  "EOT",  "ENQ",  "ACK",  "BEL",
     "BS",   "HT",   "NL",   "VT",   "NP",   "CR",   "SO",   "SI",
    "DLE",  "DC1",  "DC2",  "DC3",  "DC4",  "NAK",  "SYN",  "ETB",
    "CAN",   "EM",  "SUB",  "ESC",   "FS",   "GS",   "RS",   "VS",
    " SP",    "!",    "\"",   "#",    "$",    "%",    "&",    "'",
      "(",    ")",    "*",    "+",    ",",    "-",    ".",    "/",
      "0",    "1",    "2",    "3",    "4",    "5",    "6",    "7",
      "8",    "9",    ":",    ";",    "<",    "=",    ">",    "?",
      "@",    "A",    "B",    "C",    "D",    "E",    "F",    "G",
      "H",    "I",    "J",    "K",    "L",    "M",    "N",    "O",
      "P",    "Q",    "R",    "S",    "T",    "U",    "V",    "W",
      "X",  "  Y",  "  Z",  "  [",  "  \\",   "]",    "^",    "_",
      "`",  "  a",  "  b",  "  c",  "  d",    "e",    "f",    "g",
      "h",  "  i",  "  j",  "  k",  "  l",    "m",    "n",    "o",
      "p",  "  q",  "  r",  "  s",  "  t",    "u",    "v",    "w",
      "x",  "  y",  "  z",  "  {",  "  |",    "}",    "~",  "DEL"
    };

int
main(void)
{
    int chr;

    while (((chr = getchar()) != EOF) && (chr != '\n'))
    {
        if (chr > 127)
            continue;
        printf("The code 0x%3x represents: %3s\n", chr, asciiname[chr]);
    }
    return 0;
}

答案 1 :(得分:1)

您不需要搜索:您的asciiname的组织方式使asciiname[charValue]能够生成正确的字符串表示形式,因此您只需要查找索引。

for(i = 0; i < len ; i++) {
    printf("%c - %s\n", line[i], &asciiname[4*line[i]]);
}