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

Hacker Rank字符串数组排序问题:strcpy引发输出异常

问题:Hacker Rank字符串数组排序题输出异常

我在完成Hacker Rank的《Sorting Array of Strings》题目时,遇到了输出不符合预期的问题:相同代码在本地GCC编译运行能得到正确结果,但提交到Hacker Rank平台后输出错误。

在void string_sort函数中,将交换逻辑替换为指针交换(如下代码)后,结果恢复正常;但使用原本的strcpy交换方式时就会出错。因此我推测自己对strcpy的特性理解有误或使用不当。

指针交换代码:

char *temp = arr[i4];
arr[i4] = arr[i4 + 1];
arr[i4 + 1] = temp;

注:main函数由Hacker Rank平台预设,无法修改,我仅实现了main函数之前的5个函数,分别是lexicographic_sort、lexicographic_sort_reverse、sort_by_number_of_distinct_characters、sort_by_length、string_sort。

完整代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int lexicographic_sort(const char* a, const char* b) {
    if(strcmp(a, b) < 0){
        return 2;
    }
    else{
        return 4;
    }
}

int lexicographic_sort_reverse(const char* a, const char* b) {
    if(strcmp(a, b) < 0){
        return 4;
    }
    else{
        return 2;
    }
}

int sort_by_number_of_distinct_characters(const char* a, const char* b) {
    int Arr[26]= {0}, counterA= 0, counterB= 0;
    
    for(int i1= 0; i1<strlen(a); i1++)
    {
        Arr[a[i1] - 'a']++;
        if(Arr[a[i1] - 'a'] == 1){
            counterA++;
        }
    }
    
    for(int i1= 0; i1<26; i1++){
        Arr[i1]= 0;
    }
    for(int i1= 0; i1<strlen(b); i1++){
        Arr[b[i1] - 'a']++;
        if(Arr[b[i1] - 'a'] == 1){
            counterB++;
        }
    }
    
    if(counterA < counterB){
        return 2;
    }
    else if(counterA == counterB){
        return lexicographic_sort(a, b);
    }
    else{
        return 4;
    }
}

int sort_by_length(const char* a, const char* b) {
    if(strlen(a) < strlen(b)){
        return 2;
    }
    else if(strlen(a) == strlen(b)){
        return lexicographic_sort(a, b);
    }
    else{
        return 4;
    }
}

void string_sort(char** arr,const int len,int (*cmp_func)(const char* a, const char* b)){
    for(int i3= 0; i3 < (len-1); i3++){
        for(int i4= 0; i4 < (len-1)-i3; i4++){
            if(cmp_func(arr[i4], arr[i4+1]) == 4){
                char temp[1024]= {0};
                strcpy(temp, arr[i4]);
                strcpy(arr[i4], arr[i4+1]);
                strcpy(arr[i4+1], temp);
            }
        }
    }
}


int main() 
{
    int n;
    scanf("%d", &n);
  
    char** arr;
    arr = (char**)malloc(n * sizeof(char*));
  
    for(int i = 0; i < n; i++){
        *(arr + i) = malloc(1024 * sizeof(char));
        scanf("%s", *(arr + i));
        *(arr + i) = realloc(*(arr + i), strlen(*(arr + i)) + 1);
    }
  
    string_sort(arr, n, lexicographic_sort);
    for(int i = 0; i < n; i++)
        printf("%s\n", arr[i]);
    printf("\n");

    string_sort(arr, n, lexicographic_sort_reverse);
    for(int i = 0; i < n; i++)
        printf("%s\n", arr[i]); 
    printf("\n");

    string_sort(arr, n, sort_by_length);
    for(int i = 0; i < n; i++)
        printf("%s\n", arr[i]);    
    printf("\n");

    string_sort(arr, n, sort_by_number_of_distinct_characters);
    for(int i = 0; i < n; i++)
        printf("%s\n", arr[i]); 
    printf("\n");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:52:41