C编程阵列交换

时间:2017-11-12 14:57:14

标签: c 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的索引作为标准输入给出,作为由空格分隔的两个数字。可以有多个操作 - 每个交换操作由新行分隔。值-1和-1表示操作结束。打印由新行分隔的字符串。

请帮帮我,谢谢;)

2 个答案:

答案 0 :(得分:1)

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

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

接下来的事情你将如何扫描2D数组的数据,你需要旋转两个循环,即行和列。假设row = 5&amp; 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];语句,根据您的要求进行修改。 我希望这有帮助。

答案 1 :(得分:-1)

您可以在此处进行编码,更正和优化:

#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;
}

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