永发信息网

C语言 二维数组的复制问题,请帮帮忙

答案:1  悬赏:0  手机版
解决时间 2021-01-02 15:48
2个功能,1是按 原始输入顺序 输出字符串。2是按照ascii顺序输出字符串。
问题来了,当我先按照ascii输出字符串后,调换了指针的序列,再按1就无法原始输出字符串了,
于是我想到了strncpy函数,但是仍然无法实现

#include<stdio.h>
#include<string.h>
#include<ctype.h>
void output(char * a[],int n);
void ascii_output(char * a[],int n); //按照ascii顺序输出字符串
int main(void)
{char str[10][51];
int ch,i;
char *temp[10];
char *temp1[10];
fputs("Input 10 strings ",stdout);
for(i=0;i<10;i++)
{printf("input the %d string:\n",i+1);
fgets(str[i],51,stdin);
temp[i]=str[i]; //temp是以 行 为单位 定义的指针
temp1[i]=str[i];
}
fputs("1. 原始输出",stdout);
printf("\n");
fputs("2. 按照ascii码输出",stdout);
printf("\n");
printf("input a number :");
while(scanf("%d",&ch))
{
if(ch=='\n')continue;
switch(ch)
{
case 1:
output(temp1,10);
break;
case 2:
ascii_output(temp,10);break;
default:
printf("wrong input!\n");
break; //break在switch语句中使用的作用:跳到switch之后的下一条语句
}
fputs("继续输入序号:",stdout);
}
return 0;
}
//-------------------------原始输出--------------------
void output(char * a[] ,int n)
{
int i;
for(i=0;i<n;i++)
fputs(a[i],stdout);
}
//-------------------------ASCII顺序输出--------------------
void ascii_output(char * a[],int n )
{
int i,j;
char * temp;
for(i=0,j=i+1;i<n-1;i++,j++)
{
if(strncmp(a[i],a[j],51)>0)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
puts("字符串按照ascii顺序排序的结果为:");
output(a,n);
}
}
最佳答案

#include<stdio.h>
#include<string.h>
#include<ctype.h>
void output(char * a[],int n);   
void ascii_output(char * a[],int n);   //按照ascii顺序输出字符串
int main(void)
{char str[10][51];
    int ch,i;
    char *temp[10];   
    char *temp1[10];
    fputs("Input 10 strings ",stdout);
    for(i=0;i<10;i++)
    {printf("input the %d string:\n",i+1);
        fgets(str[i],51,stdin);
        temp[i]=str[i];      //temp是以 行 为单位 定义的指针
        temp1[i]=str[i];
    }    
    fputs("1. 原始输出",stdout);
    printf("\n");
    fputs("2. 按照ascii码输出",stdout);
    printf("\n");
    printf("input a number :");
    while(scanf("%d",&ch))
    {
        if(ch=='\n')continue;
    switch(ch)
        {
        case 1:
        output(temp1,10);
     break;
        case 2:
        ascii_output(temp,10);break;
        default:
        printf("wrong input!\n");
        break;  //break在switch语句中使用的作用:跳到switch之后的下一条语句
        }
    fputs("继续输入序号:",stdout);
    }
    return 0;
}
//-------------------------原始输出--------------------
void output(char * a[] ,int n)
{
    int i;
    for(i=0;i<n;i++)
    fputs(a[i],stdout);
}
//-------------------------ASCII顺序输出--------------------
int sorted=0;
char *temp[12];
void ascii_output(char * a[],int n )
{
    int i,j;
    char *temp[12],*p;
    if(sorted==0){
    
    for(i=0;i<10;i++){
      temp[i]=a[i];
    }
    for(i=1;i<n;i++)
    {
    for(j=0;j<n-i;j++){
        if(strncmp(temp[j],temp[j+1],51)>0)
        {
            p=temp[j];  
            temp[j]=temp[j+1];
            temp[j+1]=p;
        }
        }

    }}
    puts("字符串按照ascii顺序排序的结果为:");
    output(temp,n);
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
1982年 属相
落寞是啥意思
下列各句中,划线的成语使用恰当的一组是A.舒
网线是怎么传播信息的 是以电信号的方式吗
泰迪可以吃葡萄吗
下列说法中错误的是A.经过一点可以作无数条直
在携程上订的火车票,在12306改签后,原票款
第一题为什么选择.c
谁有matoma的girl at coachella求百度云?
妈妈把20000元存入银行,定期二年,年利率4.4
什么逃什么窜的成语
想要得到七年级英语上下册课本的条形码。非常
QQ相关界面窗口点击最小化,关闭等按键均无反
淘宝众筹靠谱吗?
戴维南定理的步骤是什么啊
推荐资讯
如何看待信主前 女友的过去
为什么电脑老是脱机工作?
2017保定国四市内转市内能过户上牌嘛?
我叫我朋友还钱,我朋友没钱还我,她欠我的已
小甜心英文怎么说
单选题森林既是重要的自然资源,又是不可替代
法国本国对巴黎公社的评价是什么?
十二怒汉演员表
歌词中有风吹过古老相思的。。
克拉玛依市公安局交警支队乌尔禾大队办公地址
根据气象局统计数据:高邮市2012年4月份某一
学校建于2000年现有24个班级100位老师1500名
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?