王小希ww 2022-07-10 19:22 采纳率: 100%
浏览 68
已结题

C语言字符指针数组交换问题

在C语言中,指针数组中的指针变量可以实现交换吗?我不清楚是我的代码问题,还是C语言本身就不支持指针数组中指针位置的交换,下面的交换得不到想要的结果。
如题

#include <stdio.h>
#include <string.h>
#include <iostream>
#define MAXLEN 1000
using namespace std;

//字符串交换
void str_swap1(char **str1, char **str2){
    char *temp;
    temp = *str1;  //此时temp指向了*str1指针变量地址
    *str1 = *str2;   //形参中**str1是指向*str1指针的指针,*str1指针变量地址修改成了*str2指针变量地址
    *str2 = temp;  //形参中**str2是指向*str2指针的指针,*str2指针变量地址修改成了temp指针变量地址
}

//字符串按字典排序
void arr_sort(char *arr[], int len){

    int i,j;
    //插入排序
    for(i = 1; i < len; ++i){
        int index = 0;
        for(j = i; j > 0; --j){
            if(strcmp(arr[j - 1], arr[j]) > 0){
               
                int k = 0;
                cout << "交换前";
                for(k = 0; k < len; ++k){
                    cout << arr[k] << " ";
                }
                
                char *temp = arr[j - 1];
                char *temp1 = arr[j];
                str_swap1(&temp,&temp1);  //传入指针变量的地址
                printf(" swap: %s, %s",temp,temp1);

                cout << "交换后";
                for(k = 0; k < len; ++k){
                    cout << arr[k] << " ";
                }
                cout << endl;
            }
        }
    }
}

int main()
{
    int num,i;
    char *arr[num];  //字符串数组
    char str[MAXLEN];  //输入的字符串

    scanf("%d",&num);
    printf("输入%d个单词\n",num);
    for(i = 0; i < num; ++i){
       arr[i] = (char *) malloc(sizeof(char) * MAXLEN);   //如果未给arr[i]分配空间,scanf会报错:segmentation fault
       scanf("%s",arr[i]);
    }
    
    // printf("输入字符串\n");
    // scanf("%s",str);

    int j;
    cout << "排序前:" << endl;
    for(i = 0; i < num; ++i){
        cout << arr[i] << endl;
    }

    arr_sort(arr,num);

    cout << "排序后:" << endl;
    for(i = 0; i < num; ++i){
        cout << arr[i] << endl;
    }

    return 0;
}

输出结果为:

3
输入3个单词
peach
banana
apple
排序前:
peach
banana
apple
交换前peach banana apple  swap: banana, peach交换后peach banana apple 
交换前peach banana apple  swap: apple, banana交换后peach banana apple
交换前peach banana apple  swap: banana, peach交换后peach banana apple
排序后:
peach
banana
apple
  • 写回答

1条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 系统已结题 7月19日
      • 已采纳回答 7月11日
      • 创建了问题 7月10日

      悬赏问题

      • ¥100 AZURE创建地图类webapp
      • ¥20 51单片机实训实验报告
      • ¥15 C# 循环读写数据中途突然变慢
      • ¥15 用Java实现双端队列
      • ¥150 ID3决策树实现分类
      • ¥15 multisim10安装后,找不到NI License Manager的程序来安装许可证
      • ¥15 C++银行卡系统 Help!
      • ¥15 R语言数据分析的相关问题
      • ¥15 模型导入SP后贴图纹理只有一个,拆了四张UV的,怎么解决?
      • ¥15 检索带order by 非常慢