从特定顺序的数字串中提取数字

时间:2014-03-12 10:01:53

标签: c arrays string image

需要从字符串中提取数字并将其保存到数组中。 使用的字符串模式是图像的像素值模式。 我们需要将图像转换为灰度,因此需要提取此值 还需要帮助将图像像素值转换为灰度图像像素值

`

  #include<stdio.h>
  #include<stdlib.h>
  #include<string.h>
  main()
  {
  char *arr[2] = { "(98, 23, 56)", "(218, 176, 164)" };
  char c[100];
  c[0]=0;
   int state,i,j,digit[2][3],k=0,m=0;
  for(i=0;i<2;i++)
  {
  for(j=0;arr[i][j]!='\0';j++)
  { 
   switch(arr[i][j])

  case '(':     printf("hello\n");  
         j++;
        int no=0;
        while(arr[i][j]!=',')
        {
        c[0]=arr[i][j];
        no=(no*10)+c[0];
        j++;
        }
        printf("\nendofcase1%c",&no);
        digit[k][m]=no;
        m++;
        break;
        case ',':
                    no=0;
                    j++;

                j++;
                while(arr[i][j]!=',')
                 {
                 c[0]=arr[i][j];
                 no=(no*10)+c[0];
                 j++;
                 }
                printf("\nendofcase2%c",no);
                digit[k][m]=no;
                m++;
                break;  
                }

              }
              k++;
         }
        for(i=0;i<2;i++)
         {
          for(j=0;j<3;j++)
           {
            printf("array of values:%d",&digit[i][j]);
           }
           printf("\n");
         } 

    }`

2 个答案:

答案 0 :(得分:0)

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

int main(){
    char *arr[2] = { "(98, 23, 56)", "(218, 176, 164)" };
    int i,j, digit[2][3];
    for(i=0;i<2;i++)
        sscanf(arr[i], "(%d, %d, %d", &digit[i][0],&digit[i][1], &digit[i][2]);

    for(i=0;i<2;i++){
        for(j=0;j<3;j++){
            printf("array of values:%d ", digit[i][j]);
        }
        printf("\n");
    }
    return 0;
}

答案 1 :(得分:0)

关键问题是2行应该是

// no=(no*10)+c[0];
no = (no*10) + c[0] - '0';

重写并创建ParseRGB()。但是解析了字符串,建议它有自己的功能。

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

int ParseRGB(int digit[3], const char *arr) {
  int ch;
  char sep = '(';
  for (int i=0; i<3; i++) {
    if (*arr++ != sep) return 1;
    sep = ',';
    while (*arr == ' ') arr++;
    if ((ch = *arr++) < '0' || ch > '9') return 1;
    digit[i] = ch - '0';
    while ((ch = *arr) >= '0' && ch <= '9') {
      digit[i] = digit[i]*10 + ch - '0';
      arr++;
    }
  }
  if  (ch != ')') return 1;
  return 0;
}

int main() {
  const char *arr[2] = { "(98, 23, 56)", "(218, 176, 164)" };
  int i;
  int digit[2][3];
  for (i = 0; i < 2; i++) {
    if (ParseRGB(digit[i], arr[i])) {
      printf("Error in '%s'\n", arr[i]);
    }
    else {
      printf("array of values:(%d, %d, %d)\n",
         digit[i][0], digit[i][1], digit[i][2]);
    }
  }
  return 0;
}