我一直试图这样做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
所以一切正常并且字符串会被替换掉,但问题是如果没有给出b
和a
所以交换的值应该是正常值而我不会知道该怎么做。
任务正好说:
从标准输入读取5个字符串并将它们放入数组中。每个字符串长度为4个字符。然后准备一个函数,交换数组的第i个和第j个元素。 i和j的索引作为标准输入给出,作为由空格分隔的两个数字。可以有多个操作 - 每个交换操作由新行分隔。值-1和-1表示操作结束。打印由新行分隔的字符串。
请帮帮我,谢谢;)
答案 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;
}
我测试了它。如果您需要任何解释,请告诉我。