永发信息网

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

答案:1  悬赏:0  手机版
解决时间 2021-01-02 15:48
  • 提问者网友:原来太熟悉了会陌生
  • 2021-01-02 03:54
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);
}
}
最佳答案
  • 五星知识达人网友:低血压的长颈鹿
  • 2021-01-02 04:14

#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);
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯