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
所以一切正常,字符串会基于此被替换,但问题是如果 b
和 a
没有给出,那么交换的值应该是正常值,而我没有知道怎么做了。
任务准确地说:
从标准输入中读取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;
}
我已经测试过了。如果您需要任何解释,请告诉我。
我已经尝试了 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 的索引作为标准输入以 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;
}
我已经测试过了。如果您需要任何解释,请告诉我。