二维字符型数组和函数

二维字符型数组

char a[5][10]

可以存储最大长度为为10的,5个字符串;

按行初始化:a[5][10]={“hello”,“world“,“who”,“are”,“you”}


  char s[3][10] = {{"hello"},{"world"},{"english"}};
  
  gets(s[0]); //s[0] 就是第0行 这个一维字符型数组的数组名 
  
  scanf();
  
  char s1[10];
  
  gets(s1);

可以逐个字符串存储进行初始化

注:
自己编写字符串函数时,形参要写成指针形式,这样比较符合字符串函数的操作思想,也会显得更加专业一点,也就是说简单的函数要显得更加专业一点。

字符串排序

主要是用strcpy给字符串赋值。

 1 #include <stdio.h>
  2 #include <string.h>
  3 
  4 int main()
  5 {
  6     char s[5][10];
  7 
  8     int n;
  9     int i = 0;
 10     printf("Input 5 string\n");
 11     for(i = 0;i<5;i++)
 12     {
 13         gets(s[i]);
 14     }
 15     int j;
 16     int k = 0;
 17     char max[10] ;
 18     strcpy(max,s[0]);
 19     for(i = 0;i<4;i++)
 20     {
 21         for(j=i+1;j<5;j++)
 22         {
 23 
 24             if(strcmp(s[i],s[j]) > 0)
 25             {
 26                 strcpy(max,s[i]);
 27                 strcpy(s[i],s[j]);
 28             
 29                 strcpy(s[j],max);
 30             }
 31         }
 32     }
 33         for(i=0;i<5;i++)
 34         printf("s[%d] = %s\n",i,s[i]);                                                                                                                               
 35 
 36 
 37     return 0;
 38 }
 39 

.二分查找字符串

主要是用strcmp替换比大小。

这里需要注意while判断条件,和整数一样,代表下标,而不是用数组中字符串长度strcmp比较。

如果字符串没有,则会和整型一样,begin和end会错开,导致end>begin不成立

  1 #include <stdio.h>
  2 #include <string.h>
  3 
  4 int main()
  5 {
  6     char s[5][10] = {"a","b","c","d","e"};
  7     int begin = 0;
  8     int end = 4;
  9     int mid;                                                                                                                                                         
 10     char n[10];
 11     gets(n);
 12     while(begin<=end)
 13     {
 14         mid = (begin+end)/2;
 15         if(strcmp(s[mid],n)>0)
 16         {
 17             end = mid -1;
 18         }else if(strcmp(s[mid],n)<0)
 19         {
 20             begin = mid + 1;
 21         }else 
 22             break;
 23     }
 24         if(begin<=end)
 25         {
 26             printf("found the string s[%d] = %s\n",mid,s[mid]);
 27         }else
 28             printf("not found\n");
 29             
 30     return 0;
 31 }

函数---function

函数定义:表示把功能实现出来。

函数调用 :表示使用功能。

类型说明符 函数名(形式参数1,形式参数2,形式参数3,……)

{

        函数体代码;

}

(1)类型标识符

            数据类型 //表示函数要带出的结果的类型。

                注意:数组类型不能做函数返回结果的类型。

                       a.如果函数不需要带出结果,此时返回结果类型为void。

                        b.如果返回结果的类型与类型说明符不一致,以类型说明符为准,最终结果的类型,都会转为类型说明符所表示的类型。

                        c.如果没有写返回结果类型,默认为int型。

                        d.函数体中没有返回值,不需要写return 返回值。

(2)函数名

             标识符,命名规则符合标识符命名规则。

(3)形式参数

           表示调用函数时需要用到的实际参数,每个形参都有自己对应的数据类型

(4)函数体代码

          实现函数具体功能部分d代码。

函数定义位置:

1.main函数之前.

2.main函数之后,需要在调用函数之前声明.

注意:函数传参是传递的数值 ,值传递。

eg:

  1 #include <stdio.h>
  2 #include <string.h>
  3 
  4 int add(int num1,int num2)  //创建函数
  5 {
  6     int sum;
  7     sum = num1 +num2;
  8     return sum;
  9 }
 10 
 11 int main()
 12 {
 13     int ret;
 14     ret = add(4,6);//调用函数
 15 
 16     printf("ret = %d",ret);                                                                                                                                          
 17     return 0;
 18 }
~        

练习:

写一个判断输入数字是不是素数的函数,并使用

 1 #include <stdio.h>
  2 #include <string.h>
  3 #include <math.h>
  4 int sushu(int num1)
  5 {
  6     int i,n;
  7     for(i=2;i<sqrt(n)+1;i++)
  8     {
  9         if(num1==1&&num1==2)
 10             n = 1;
 11         if(num1%i==0)
 12         {
 13             n = 0;
 14             break;
 15         }
 16         if(i>=sqrt(n))
 17         {
 18             n = 1;
 19         }
 20     }
 21     return n;
 22 }
 23 
 24 int main()
 25 {
 26     int ret,n;
 27     printf("Input a num:\n");
 28 
 29     scanf("%d",&ret);
 30 
 31     n = sushu(ret);
 32 
 33     if(n==0)
 34     printf("%d is not sushu\n",ret);
 35     else
 36         printf("%d is sushu\n",ret);                                                                                                                                 
 37 
 38     return 0;
 39 }

附加:void bzero(void *s,size _t  n)s为首地址,n表示从首地址开始后n个字节清零。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值