You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在C++中使用驱动程序测试选择排序的问题求助

搞定字符串选择排序的测试问题

嘿,我来帮你解决这个困扰!其实字符串数组的选择排序测试,核心思路和数值数组是相通的——只是要注意字符串本身的比较规则,我一步步给你拆解:

首先先把你没写完的代码补全,C++里的std::string本身支持<、>这类比较运算符,默认是按ASCII码顺序(也就是大小写敏感的字母序,比如大写字母会排在小写前面,毕竟'A'的ASCII值是65,'a'是97)来对比的,所以选择排序的逻辑和数值数组几乎一致:

#include <iostream>
#include <string>
using namespace std;

void selectionSort(string arr[], int size) {
    int minIndex;
    string minValue;

    for (int start = 0; start < (size - 1); start++) {
        minIndex = start;
        minValue = arr[start];
        for (int index = start + 1; index < size; index++) {
            // 直接用string自带的比较运算符,默认就是字母序(大小写敏感)
            if (arr[index] < minValue) {
                minValue = arr[index];
                minIndex = index;
            }
        }
        swap(arr[minIndex], arr[start]);
    }
}

void displayArray(string arr[], int size) {
    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

接下来是测试驱动程序,核心就是准备测试用例→排序→和预期结果对比,我给你写个完整的示例:

测试驱动代码示例

int main() {
    // 测试用例1:混合大小写的字符串数组
    string testArr1[] = {"Banana", "apple", "Cherry", "date", "Blueberry"};
    int size1 = sizeof(testArr1) / sizeof(testArr1[0]);
    
    cout << "排序前的数组:";
    displayArray(testArr1, size1);
    
    selectionSort(testArr1, size1);
    
    cout << "排序后的数组:";
    displayArray(testArr1, size1);
    
    // 验证结果是否符合预期(注意默认ASCII顺序,大写字母在前)
    string expectedArr1[] = {"Banana", "Blueberry", "Cherry", "apple", "date"};
    bool test1Passed = true;
    for (int i = 0; i < size1; i++) {
        if (testArr1[i] != expectedArr1[i]) {
            test1Passed = false;
            cout << "测试用例1失败:第" << i+1 << "个元素不对,预期是" << expectedArr1[i] << ",实际是" << testArr1[i] << endl;
            break;
        }
    }
    if (test1Passed) {
        cout << "测试用例1通过!" << endl;
    }

    // 测试用例2:全小写字符串,验证纯字母序
    string testArr2[] = {"zebra", "apple", "cat", "dog", "elephant"};
    int size2 = sizeof(testArr2) / sizeof(testArr2[0]);
    
    cout << "\n排序前的数组:";
    displayArray(testArr2, size2);
    
    selectionSort(testArr2, size2);
    
    cout << "排序后的数组:";
    displayArray(testArr2, size2);
    
    string expectedArr2[] = {"apple", "cat", "dog", "elephant", "zebra"};
    bool test2Passed = true;
    for (int i = 0; i < size2; i++) {
        if (testArr2[i] != expectedArr2[i]) {
            test2Passed = false;
            cout << "测试用例2失败:第" << i+1 << "个元素不对,预期是" << expectedArr2[i] << ",实际是" << testArr2[i] << endl;
            break;
        }
    }
    if (test2Passed) {
        cout << "测试用例2通过!" << endl;
    }

    return 0;
}

几个关键提醒

  • 大小写敏感问题:如果需要忽略大小写的字母序排序,得修改排序里的比较逻辑,比如把每个字符转成小写后再对比,用std::lexicographical_compare配合自定义谓词就行:
    // 忽略大小写的比较逻辑
    if (lexicographical_compare(arr[index].begin(), arr[index].end(),
                                minValue.begin(), minValue.end(),
                                [](char a, char b) { return tolower(a) < tolower(b); })) {
        minValue = arr[index];
        minIndex = index;
    }
    
    对应的测试用例预期也要改成忽略大小写的顺序,比如"apple"会排在"Banana"前面。
  • 测试用例要全面:别忘了覆盖空数组、单元素数组、已经有序的数组、逆序数组、包含重复字符串的数组,这样才能确保你的排序函数足够鲁棒。

如果你的代码里还有其他细节问题,比如displayArray的实现bug,或者排序逻辑的疏漏,可以把完整代码贴出来,我再帮你排查~

内容的提问来源于stack exchange,提问作者user9307501

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:22:29