搜索数组 - 将值替换为C中另一个数组的值

时间:2015-01-26 10:54:43

标签: c arrays loops search replace

我是编程新手,我尝试构建各种有趣的小应用程序,以便了解基础知识。我已经从C开始真正从底部开始,所以下面指的是C。

所以基本上我需要数组a []并替换[],它们都是200长填充随机数。

我想在[]中搜索值32(ele),并用replace []中的相应值替换该值的任何出现。

E.g。 if:a [22] = 32,替换[22] = 78 =>一个[22] = 78

同时我希望它“记录”索引号(22)并将其记录到文件中。

我无法多次通过[]并替换每个实例。它只替换1个实例然后中断。

我没有错误信息。以下代码。希望你能帮助新手。 如果您有答案,请花一点时间解释如何/为什么。

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

FILE *ifp, *ofp;

int ix;
int ik;
int i;
int change;
int count = 0;
int ele = 32;
int num = 200;
int a[200];
int replace[200];   


void swap(int a[], int replace[], int change)
{
    int temp = replace[change];
    a[change] = replace[change];
    a[change] = temp;

    ifp = fopen("/Users/kjaerolsen/tmp/ilog.txt", "a+");

    fprintf(ifp, "%d\n", change);

    fclose(ifp);
}


int main(int argc, char *argv[]) {
    // creates array with random numbers to draw new numbers from.
    srand(time(NULL));

    for (int ik = 0; ik < 200; ik++)
    {
        rand();
        replace[ik] = rand() % 200; // / rand_max;
    }

    for (int ik = 0; ik < 200; ik++)
    {
        fprintf(ifp, "%d\n", replace[ik]);
    }
    // creeates main array with random numbers.
    srand(time(NULL));

    for (int ix = 0; ix < 200; ix++)
    {
        rand();
        a[ix] = rand() % 200; // / rand_max;
    }

    for (int ix = 0; ix < 200; ix++)

    {
        printf("plads %d i array: %d\n",ix, a[ix]);
    }

    // Looks for number 32 (ele) in array
    i = 0;
    for (int i =0; i < 200; i++)
    {
        change++;
        swap(int a[], int replace[], int change)
        count++;

    }

    if (count == 0)
        printf("%d is not present in array.\n", ele);
    else
        printf("%d is present %d times in array.\n", ele, count);

    // Opens the file and rewrites the new array. 

    ifp = fopen("file1.txt", "w+");
    for (int ix = 0; ix < 200; ix++)
    {
        fprintf(ifp, "%d\n", a[ix]);
    }

    fclose(ifp);

    printf("very done...");
    return (0);
}

2 个答案:

答案 0 :(得分:0)

必须在第二个循环之前打开ifp并在之后fclose。您当前的代码出现了分段错误:

ifp = fopen( ... );
for (int ik = 0; ik < 200; ik++)
{
    fprintf(ifp, "%d\n", replace[ik]);
}
fclose( ifp );

此外,您可以使用三个XOR进行交换:

a ^= b;
b ^= a;
a ^= b;

并且没有临时变量;

答案 1 :(得分:0)

非常感谢你的帮助。我终于成功地使它发挥作用 - 它很美。我将它从实际函数移到循环中,因为没有卷轴需要调用函数。其次,我错过了最高IF。但最重要的是@micarelli你对XOR的建议就行了。

对于像你这样的几个核心编码员来说,也许并不多,但它确实令人满意。 我在下面发布了最后一段代码。

    i = 0;
    for (int i =0; i < 200; i++)

    if (a[i] == ele)
{
    a[i] ^= replace[i];
    count++;
}

    if ( count == 0 )
    printf("%d is not present in array.\n", ele);
    else
    printf("%d is present %d times in array.\n", ele, count);

// Opens the file and rewrites the new array. 

    ifp = fopen("/Users/kjaerolsen/tmp/file1.txt", "w+");

    for (int ix = 0; ix < 200; ix++)

{
    fprintf(ifp, "%d\n", a[ix]);
}

    fclose(ifp);