需要从字符串中提取数字并将其保存到数组中。 使用的字符串模式是图像的像素值模式。 我们需要将图像转换为灰度,因此需要提取此值 还需要帮助将图像像素值转换为灰度图像像素值
`
#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");
}
}`
答案 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;
}