C编程数组交换

C programming array swap

我已经尝试了 4 个小时但没有成功,我真的需要完成它。这是我学校的任务。

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

int main() {
    char strings[5][5][5][5][5];
    char *temp[5];

    int b[5];
    int a[5];

    int x;
    int i;
    int z;

    int a_value;
    int b_value;

    //get 5 strings from the input
    for (i = 0; i < 5; i++) {
        scanf("%s", strings[i]);
    }

    //Get 5 numbers from the input
    for (x = 0; x < 5; x++) {
        scanf("%d %d", & b[x], & a[x]);
        //printf("B is %d and A is %d\n", b[x], a[x]);

        a_value = a[x];
        b_value = b[x];
        temp[b_value] = strings[a_value];

        //If the values of a and b are equal to -1 denote the operation (end it)
        if (b[x] == -1 && a[x] == -1) {
            break;
        }
    }


    //Get the swapped values
    for (z = 0; z<=x; z++) {
        printf("%s\n", temp[z]);
    }
    return 0;
}

输入:

aadf
bazz
abkt
bbaa
zzzz
1 3
0 4
3 2
-1 -1

输出应该是这样的

zzzz
bbaa
bazz
abkt
aadf

我得到的是这个

zzzz
bbaa
abkt

所以一切正常,字符串会基于此被替换,但问题是如果 ba 没有给出,那么交换的值应该是正常值,而我没有知道怎么做了。

任务准确地说:

从标准输入中读取5个字符串并将它们放入一个数组中。每个字符串的长度为 4 个字符。然后准备一个函数,交换数组的第 i 个和第 j 个元素。 i 和 j 的索引作为标准输入以 space 分隔的两个数字给出。可以有多个操作——每个交换操作都用换行分隔。值 -1 和 -1 表示操作结束。打印由新行分隔的字符串。

请帮助我,谢谢 ;)

为什么是 5 维数组,char strings[5][5][5][5][5]?你只想将 5 个字符串作为输入 所以为此采用 2D 数组

char strings[5][4];// 总共5个字符串,每个字符串可以存储4个字符。

接下来你将如何扫描二维数组的数据,你需要旋转两个循环,即行和列。假设 row = 5 & col = 4

for (i = 0; i < row; i++) {
        for(j = 0; j < col; j++) {
            scanf("%c", &strings[i][j]);
        }
    }

接下来这个temp[b_value] = strings[a_value];语句需要修改,按你的要求修改。 我希望这有帮助。

这是经过更正和优化的代码:

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

int main() {
    char strings[5][5];
    char temp[4];
    int x,y;

    //get 5 strings from the input
    for (int i = 0; i < 5; i++) {
      scanf("%s", strings[i]);
    }

    do{
        scanf("%d %d", & x, & y);
        // Assign string[x] to temp
        for(int i=0;i<4;i++){
            temp[i] = strings[x][i];
        }
        // Assign string[y] to string[x]
        for(int i=0;i<4;i++){
            strings[x][i] = strings[y][i];
        }
        // Assign temp to string[y]
        for(int i=0;i<4;i++){
            strings[y][i] = temp[i];
        }
    }while(x!=-1 && y!=-1);


    //Get the swapped values
    for (int i = 0; i< 5; i++) {
      printf("%s\n", strings[i]);
    }

    return 0;
}

我已经测试过了。如果您需要任何解释,请告诉我。