C中的变量替换(变量名本身)

时间:2017-03-16 09:49:55

标签: c

我正在尝试在C中使用变量替换。基本上我正在尝试 在图中找到最短路径b / w源节点和目标节点。在这里,我考虑了5个节点A,B,C,D和E.我已经在dist_a,dist_b等数组中存储了节点的距离(我也可以将距离存储在5x5矩阵中)。在for循环中,我正在检查目标节点的直接邻居(来自用户的输入)。但是,如何从 dstn 变量中替换该值,以便条件变为 dist_e (如果用户输入e作为目标)?

#include <stdio.h>
#include <conio.h>

void main()
{
int i,j;
char src, dstn, c;

int dist_a[5]={0,1,6,5,1000}; //taking 1000 as infinity means nodes aren't connected directly to each other
int dist_b[5]={1,0,1000,1,1000};
int dist_c[5]={6,1000,0,1,1};
int dist_d[5]={5,1,1,0,2};
int dist_e[5]={1000,1000,1,2,0};
clrscr();

printf("Enter source and destination\n");
scanf("%c %c",&src,&dstn);
printf("src = %c destn = %c",src,dstn);

for(i=0;i<=4;i++)
 {
   if(dist_dstn[i]!=0 && dist_dstn[i]!=1000)  //The PROBLEM lies here. How do i substitute the value of dstn variable in the condition part.
     {printf("%c updates to %d",dstn,i);}
 }

getch();
}

我见过Variable Substitution in C,但我认为这不适用于此。

2 个答案:

答案 0 :(得分:4)

C不是反射语言,因为可以在运行时检查变量名称。

但在你的情况下,为什么不使用2D数组:

int dist[][5]={ 
    {0,1,6,5,1000},
    {1,0,1000,1,1000},
    {6,1000,0,1,1},
    {5,1,1,0,2},
    {1000,1000,1,2,0}
};

然后,您可以通过对此阵列进行适当的索引来选择所需的条带。将a映射到0,将b映射到1,等等。switch块就足够了。 (不要假设使用带有c - 'a'类型惯用语的ASCII作为字符c。)

答案 1 :(得分:2)

问题在于您创建了5个单独的非相关数组。别这么做。

相反,您可以定义自定义类型:

typedef struct
{
  int distance [5];
} dist_t;

然后声明一个这样类型的数组:

dist_t dist [5] = 
{
  {0,1,6,5,1000},
  {1,0,1000,1,1000},
  ...
};

然后迭代该数组。