WangGaoteng的个人博客分享 http://blog.sciencenet.cn/u/WangGaoteng

博文

多维字符数组

已有 2455 次阅读 2017-10-22 11:27 |系统分类:科研笔记

一维字符数组:

char s[10]={"a"};

字符串a的首地址是s。

puts(s)输出a


二维字符数组:

char s2[][10]={"ab","cd"};

它是这样表示的:


字符串ab的首地址是s2[0],字符串cd的首地址是s2[1],这里方括号表示第二维。

puts(s2[0])输出ab

putchar(s2[0][1])输出b


三维字符数组:

char s3[][2][10]={{"abc","def"},{"123","456"},{"ABC","DEF"}};

它是这样表示的:


字符串abc的首地址是s3[0][0],字符串DEF的首地址是s3[2][1],这里从右数第一个方括号表示第二维,第二个方括号表示第三维。

puts(s3[0][0])输出abc,puts(s3[2][1])输出DEF

putchar(s3[2][1][0])输出D


举例:谭四版ch7-15

写几个函数,①输入10个职工的姓名和职工号;②按职工号由小到大顺序排序,姓名顺序也随之调整;③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。


file1:

#include "stdio.h"
#include "string.h"
#include "math.h"
#define N 4

int main()
{
   void f1(char s[N][2][10]);
   void f2(char s[N][2][10]);
   void f3(char s[N][2][10],char n[10]);
   char s[N][2][10]={},n[10]={};
   printf("Input number and name:\n");
   f1(s);
   printf("sort:\n");
   f2(s);
   printf("Input a number: ");
   scanf("%s",n);
   f3(s,n);
   return 0;
}

file2:

#include "stdio.h"
#include "string.h"
#include "math.h"
#define N 4

void f1(char s[N][2][10])
{
   int i,j,k;
   for(i=0;i<N;i++)
   {
       printf("%d\n",i);
       for(j=0;j<2;j++)
           if(j==0)
           {
               printf("number: ");
               scanf("%s",s[i][j]);
               while(1)
               {
                   w1:for(k=0;k<=i-1;k++)
                       if(strcmp(s[k][j],s[i][j])==0)
                       {
                           printf("same with %d, input the number again: ",k);
                           scanf("%s",s[i][j]);
                           goto w1;
                       }
                   for(k=0;k<=i-1;k++)
                       if(s[i][j]!=s[k][j])
                           continue;
                   break;
               }

           }
           else
           {
               printf("name: ");
               scanf("%s",s[i][j]);
           }
   }
}

void f2(char s[N][2][10])
{
   int i,j;
   char t[1][2][10]={};
   for(i=0;i<N-1;i++)
       for(j=i;j<N;j++)
           if(strcmp(s[i][0],s[j][0])==1)
           {
               strcpy(t[0][0],s[i][0]);
               strcpy(t[0][1],s[i][1]);
               strcpy(s[i][0],s[j][0]);
               strcpy(s[i][1],s[j][1]);
               strcpy(s[j][0],t[0][0]);
               strcpy(s[j][1],t[0][1]);
           }
   for(i=0;i<N;i++)
       printf("%s\t%s\n",s[i][0],s[i][1]);
}

void f3(char s[N][2][10],char n[10])
{
   int left,right,mid;
   left=0;
   right=N-1;
   while(left!=right)
   {
       mid=(left+right)/2;
       if(fabs(fabs(left-right)-1)<1e-6 && strcmp(n,s[mid][0])!=0)
       {
           printf("not exit!\n");
           break;
       }
       if(strcmp(n,s[mid][0])==0)
       {
            puts(s[mid][1]);
            break;
       }
       else if(strcmp(n,s[right][0])==0)
           {
               puts(s[right][1]);
               break;
           }
       else if(strcmp(n,s[mid][0])==-1)
               right=mid;
       else if(strcmp(n,s[mid][0])==1)
               left=mid;
   }
}




https://blog.sciencenet.cn/blog-537176-1081949.html

上一篇:笨法排序
下一篇:装袋机变量分配及功能说明
收藏 IP: 123.52.90.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-9-1 12:16

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部