C - 在for循环的设置中使用变量

时间:2018-02-22 18:21:27

标签: c cs50

我想知道它是否有可能做这样的事情: 如果数字是偶数定义一个字符串变量“replace”等于先前定义的数组“arraya”的名称,然后在for循环的设置中使用包含字符串arraya的变量“replace”,并且将数组与另一个变量进行比较。下面的代码不起作用,但它可能有助于解释我的疑问。

int x = 0;
int y = 0;

int arraya[] = {2,4,6};
int arrayb[] = {1,3,5};

if ( x % 2 == 0)
{
    string replace = "arraya";
}
else
{
    string replace = "arrayb";
}

for (int i = 0, n = sizeof(replace); i < n; i++)  //instead of using arraya or arrayb, use replace dependig on the condition
{
    if ( x == replace[i])  // same here
         {
            break;
         }
         else
         {
            y++;
         }
}
PD:我知道在C中,没有字符串,只有字符数组,但在CS50中,它们将变量的类型定义为字符串。

1 个答案:

答案 0 :(得分:0)

这是你可以做的,

int *p;
int len;
if ( x % 2 == 0)
{
    p = arraya;
    len = sizeof(arraya)/sizeof(arraya[0]);
}
else
{
    p = arrayb;
    len = sizeof(arrayb)/sizeof(arrayb[0]);
}
for (int i = 0, n = len; i < n; i++)  
{
    if ( x == p[i])  // same here
    ...
}

C中没有implcit字符串类型。而且,如果不在数组对象本身上使用sizeof,则无法获得数组的长度。此外,您无法根据字符串的内容获取数组。

另外你也可以用另一种方式 - 也就是抽象出一个在函数中常见的实现逻辑,然后执行此操作: -

void fun(int *a, int size){
   ....
}

main()

if ( x % 2 == 0)
{
    fun(arraya, sizeof(arraya)/sizeof(arraya[0]));
}
else
{
    fun(arrayb, sizeof(arrayb)/sizeof(arrayb[0]));
}