【问题标题】:Error cannot convert 'std::string {aka std::basic_string<char>}' to 'int' in assignment错误不能在赋值中将 'std::string {aka std::basic_string<char>}' 转换为 'int'
【发布时间】:2020-12-13 03:37:09
【问题描述】:

我知道有人问过了,

但我还是找不到出路

我必须创建将按学生 ID 号排序的数据

希望你能帮帮我

#include <iostream>
using namespace std;

int main () {

    int NIM[10];
    string nama[10], alamat[10];
    char golongan_darah[10];
    int i, j;

    for (i=0; i<10; i++) {
       cout << "Masukkan data siswa ke-" << i+1 << endl;
       cout << "NIM : "; cin >> NIM[i];
       cout << "Nama : "; cin >> nama[i];
       cout << "Alamat : "; cin >> alamat[i];
       cout << "Golongan Darah ('A'/'B'/'AB'/'O') : "; cin >> golongan_darah[i];
    }

     int pivot;
    for (i=0; i<10; i++) {
        for (j=i+1; j<10; j++){
            if (NIM[i] > NIM[j]) {
              pivot= NIM[i];
              NIM[i]=NIM[j];
              NIM[j]=pivot;
              pivot= nama[i];
              nama[i]=nama[j];
              nama[j]=pivot;
              pivot= alamat[i];
              alamat[i]=alamat[j];
              alamat[j]=pivot;
              pivot= golongan_darah[i];
              golongan_darah[i]=golongan_darah[j];
              golongan_darah[j]=pivot;
            }
        }
    }
      cout << "  NIM  |  Nama  |  Alamat  | Golongan Darah" << endl;
    for (i=0; i<10; i++) {
        cout << NIM [i] << nama[i] << alamat[i] << golongan_darah[i] << endl;
    }

}

pivot= nama[i];pivot= alamat[i]; 出现错误

提前致谢

【问题讨论】:

  • 请在您的问题中添加错误。
  • 您正在尝试将字符串分配给整数。两者之间没有自动转换。假设您正在进行冒泡排序,除了您用于整数的变量之外,您还需要为字符串使用一个临时字符串变量。
  • 错误是不言自明的。您不能将字符串值分配给整数。 Pivot 在这里被声明为整数。
  • @ChrisMM 我正在​​尝试对学生证号进行排序,其他数据如姓名 [nama]、地址 [alamat] 和血型 [golongan_darah] 就在后面
  • @Tushar 那我该怎么办?为什么第一个枢轴 'pivot= NIM[i]' 不是错误?

标签: c++ arrays sorting


【解决方案1】:

您正在尝试将字符串值分配给整数,您可以使用stoi() 函数解决此问题。这将接受一个字符串并将其转换为整数数据类型。

pivot= stoi(nama[i]);

pivot= stoi(alamat[i]);

这里有更多信息:http://www.cplusplus.com/reference/string/stoi/

【讨论】:

  • 这可能不起作用,并且会导致stoi 抛出。大概nama 是“名称”或类似名称,并且不包含数字。
【解决方案2】:

您需要使用一个临时变量来切换数组中的顺序。您已经使用 pivot 对整数进行了此操作,但是这不适用于字符串。

int pivot;
std::string temp;
for (i=0; i<10; i++) {
    for (j=i+1; j<10; j++){
        if (NIM[i] > NIM[j]) {
            pivot= NIM[i]; // NIM stores integers, so this is fine
            NIM[i]=NIM[j];
            NIM[j]=pivot;
            temp= nama[i]; // nama stores strings, so use the new string temp variable
            nama[i]=nama[j];
            nama[j]=temp;
            temp= alamat[i]; // alamat stores strings, so use the new string temp variable
            alamat[i]=alamat[j];
            alamat[j]=temp;
            pivot= golongan_darah[i]; // golongan_darah is stores chars, these can be stored in int
            golongan_darah[i]=golongan_darah[j];
            golongan_darah[j]=pivot;
        }
    }
}

或者,您可以使用std::swap

for (i=0; i<10; i++) {
    for (j=i+1; j<10; j++){
        if (NIM[i] > NIM[j]) {
            std::swap( NIM[i], NIM[j] );
            std::swap( nama[i], nama[j] );
            std::swap( alamat[i], alamat[j] );
            std::swap( golongan_darah[i], golongan_darah[j] );
        }
    }
}

【讨论】:

    【解决方案3】:
    #include <iostream>
    using namespace std;
    
    int main () {
    
        int NIM[10];
        string nama[10], alamat[10];
        char golongan_darah[10];
        int i, j;
    
        for (i=0; i<10; i++) {
           cout << "Masukkan data siswa ke-" << i+1 << endl;
           cout << "NIM : "; cin >> NIM[i];
           cout << "Nama : "; cin >> nama[i];
           cout << "Alamat : "; cin >> alamat[i];
           cout << "Golongan Darah ('A'/'B'/'AB'/'O') : "; cin >> golongan_darah[i];
        }
    
         int pivot;
        for (i=0; i<10; i++) {
            for (j=i+1; j<10; j++){
                if (NIM[i] > NIM[j]) {
                  pivot= NIM[i];
                  NIM[i]=NIM[j];
                  NIM[j]=pivot;
                  pivot= stoi(nama[i]); //as pivot is int type nama is changed using stoi() function.
                  nama[i]=nama[j];
                  nama[j]=pivot;
                  pivot= stoi(alamat[i]);  //as pivot is int type nama is changed using stoi() function.
                  alamat[i]=alamat[j];
                  alamat[j]=pivot;
                  pivot= golongan_darah[i];
                  golongan_darah[i]=golongan_darah[j];
                  golongan_darah[j]=pivot;
                }
            }
        }
          cout << "  NIM  |  Nama  |  Alamat  | Golongan Darah" << endl;
        for (i=0; i<10; i++) {
            cout << NIM [i] << nama[i] << alamat[i] << golongan_darah[i] << endl;
        }
    
    }
    

    【讨论】:

    • 它说 [Error] 'stoi' 没有在这个范围内声明
    • 我是改编译器还是改成.c?
    • 这行不通。当您尝试分配nama[j]=pivot;alamat[j]=pivot; 时,它只会给出编译器错误。姓名和地址不是整数。只需使用std::swap 来交换值而不是这个。
    • std::stoi 是在 C++11 中引入的。确保您的编译器设置正确并且您的编译器支持 C++11。
    • @Tushar 我明白了,现在我得到了问题,谢谢你的帮助,这是我的大学任务
    猜你喜欢
    • 2017-03-10
    • 2017-02-12
    • 2023-03-21
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 2021-10-28
    • 2015-01-03
    • 1970-01-01
    相关资源
    最近更新 更多