如何在c ++中基于输入整数值交换数组?

时间:2014-06-06 17:16:17

标签: c++ arrays

我有以下字符数组,它们对应于前面给出的整数。

char a[100] = "hi",    //---corresponds to integer 1.
     b[100] = "my",    //                          2.
     c[100] = "name",  //                          3.
     d[100] = "is",    //                          4.
     e[100] = "nis",   //                          5.
     f[100] = "hu";    //                          6.
int x,y;
cin >> x >> y;

假设每个数组都包含一些内容。

现在,我将两个整数x和y(位于1到6之间)作为输入,并且基于x和y,想要交换相应的数组。

我不想使用类型字符串数组。另外我认为我可以使用enum做到这一点,只是似乎不明白怎么做?

示例输入1 3

示例输出a =名称c = hi

2 个答案:

答案 0 :(得分:2)

您可以使用以下内容:(https://ideone.com/N8iQBF

#include <algorithm>
#include <iostream>

bool isValidIndice(int index) { return 1 <= index && index <= 6; }

int main()
{
    char a[100] = "hi",    //---corresponds to integer 1.
        b[100] = "my",     //                          2.
        c[100] = "name",   //                          3.
        d[100] = "is",     //                          4.
        e[100] = "Nis",    //                          5.
        f[100] = "hu";     //                          6.

    char (*mapping[])[100] = {&a, &b, &c, &d, &e, &f};

    int x, y;
    std::cin >> x >> y;

    if (isValidIndice(x) && isValidIndice(y)) {
        std::cout << "swap" << std::endl;
        std::swap(*mapping[x - 1], *mapping[y - 1]); // swap the content, so do some copies of char.
    }
    std::cout << a << " " << b << " " << c << " " << d << " " << e << " " << f << std::endl;
    return 0;
}

如果使用std::string

,会更简单

答案 1 :(得分:1)

最后使用字符串类型数组来完成它。

#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
int x,y;  
cout<<"Exchange String\n\n";
string a[6];
a[0]="hi";a[1]="my";a[2]="name";a[3]="is";a[4]="nis";a[5]="hu";
while(1){
cout<<"1) "<<a[0]<<"\n2) "<<a[1]<<"\n3) "<<a[2]<<"\n4) "<<a[3]<<"\n5) "<<a[4]<<"\n6) "<<a[5];
cout<<"\nChoose x and y in between 1 to 6, type -1 to quit" ;
cin>>x >> y;

   if(x==-1){
       exit(1);
   }
   string temp = a[x-1];
   a[x-1] = a[y-1];
   a[y-1]= temp;
 }
}