数组和字符串

本文介绍了C语言中的一维数组和二维数组的定义与特性,包括数组的内存分配和初始化。详细讲解了字符串在C语言中的处理,如strlen计算字符串长度,strcpy进行字符串拷贝,strcat实现字符串连接,以及strcmp进行字符串比较。此外,还提供了一个简单的编程题,要求使用选择排序算法对输入的10个数字进行排序。
摘要由CSDN通过智能技术生成

一、一维数组

        1.数组名表示内存首地址,是地址常量。

        2.sizeof(数组名)是数组占用的总内存空间。

        3.编译时分配连续内存,内存字节数=数组维数*sizeof(元素数据类型)。

        4.数组不初始化,其元素值为随机数。

        5.对static数组元素不赋初值,系统会自动赋以0值。

                static int a[5];等价于:a[0]=0;  a[1]=0; a[2]=0; a[3]=0; a[4]=0;

二、二维数组

        1.定义方式:数据类型 数组名[常量表达式][常量表达式];

        2.行可以省略列不可。

        3.字符串结束标志:'\0'。

#include <stdio.h>//杨辉三角

int main(int argc, char *argv[])
{
        int a[10][10] = {{0}};
        int i, j;

        for (i = 0; i < 10; i++) {
                a[i][0] = 1;//第一列赋1
                for (j = 1; j <= i; j++)
                        a[i][j] = a[i-1][j-1] + a[i-1][j];//赋值
        }

        for (i = 0; i < 10; i++)  {
                for (j = 0; j <= i; j++)//使输出的列数小于等于行数
                        printf("%-8d ", a[i][j]);//%-8d左对齐,右边空8个空格
                putchar('\n');//空格
        }

        return 0;
}

       字符串逆序输出

#include <stdio.h>

int main(int argc, char *argv[])
{
        char arr[] = "welcome";
        int i, n;

        n = sizeof(arr)/sizeof(char);//字符串个数
        for (i = n-1; i >= 0; i--)
                putchar(arr[i]);
        putchar('\n');//换行

        return 0;
}

        输入一个字符逆序输出

#include <stdio.h>
#include <string.h>

#define N 20

int main(int argc, char *argv[])
{
        //char arr[] = "welcome";
        char arr[N] = {0};
        int i, n;

        printf("Please input a string:");
        gets(arr);

        n = strlen(arr); 
        for (i = n-1; i >= 0; i--)
                putchar(arr[i]);
        putchar('\n');

        return 0;
}

  

#include <stdio.h>
#include <string.h>

#define N 20

int main(int argc, char *argv[])
{
        char arr[N] = {0};
        int i, j, n, ch;

        printf("Please input a string:");
        gets(arr);

        n = strlen(arr);
        i = 0;
        j = n-1;
        while (i < j) {
                ch = arr[i];
                arr[i] = arr[j];
                arr[j] = ch;
                i++;
                j--;
        }

        puts(arr);

        return 0;
}

三、字符串函数

        1.字符串长度函数strlen

                格式:strlen(字符数组)

                功能:计算字符串长度

                返值:返回字符串实际长度,不包括‘\0’在内

                \xhh表示十六进制数代表的符号

                \ddd表示8进制的

                例:对于以下字符串,strlen(s)的值为:

                        char  s[10]={‘A’,‘\0’,‘B’,‘C’,‘\0’,‘D’};

                        char  s[ ]=“\t\v\\\0will\n”;//特殊字符遇到strlen不算

                        char  s[ ]=“\x69\141\n”;

                        答案:1   3   3

#include <stdio.h>
#include <string.h>

int main()
{
    char s1[] = "makeru";
    
    printf("%d\n",strlen(s1));//字符串长度,不带'\0',长度为6
    printf("%d\n",sizeof(s1)/sizeof(char));//带'\0',ca'长度为7
    
    return 0;
}

        2.字符串拷贝函数strcpy

                格式:strcpy(字符数组1,字符串2)

                功能:将字符串2,拷贝到字符数组1中去

                返值:返回字符数组1的首地址

                说明:

                                字符数组1必须足够大

                                拷贝时‘\0’一同拷贝

#include <stdio.h>
#include <string.h>

#define N 30
int main()
{
    char src[] = "makeru";
    char dest[N];
    int i, n;
    
    strcpy(dest, src);
        
    //i = 0;
    //n = strlen(src);
    //printf("n=%d\n",n);
    //while(i <= n){//和strcpy的效果是一样的
    //       dest[i] = src[i];
    //        i++;
    //}
    
    puts(src);
    puts(dest);    

    return 0;
}

        3.字符串连接函数strcat

                格式:strcat(字符数组1,字符数组2)

                功能:把字符数组2连到字符数组1后面

                返值:返回字符数组1的首地址

                说明:

                        字符数组1必须足够大

                        连接前,两串均以‘\0’结束;连接后,串1的‘\0’取消,新串最后加‘\0’

        4.字符串比较函数strcmp

                格       式:strcmp(字符串1,字符串2)

                功       能:比较两个字符串

                比较规则:对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或‘\0’为止                                         

                返       值:返回int型整数

                                a. 若字符串1< 字符串2, 返回负整数

                                b. 若字符串1> 字符串2, 返回正整数

                                c. 若字符串1== 字符串2, 返回零

#include <stdio.h>
#include <string.h>

int main()
{
    char s1[] = "aa";
    char s2[] = "abc";

    printf("%d\n", strcmp(s1,s2));
    
    return 0;
}

拓展        

               strncpy(p, p1, n) 复制指定长度字符串

                strncat(p, p1, n) 附加指定长度字符串

                strcasecmp忽略大小写比较字符串

                strncmp(p, p1, n) 比较指定长度字符串

                strchr(p, c) 在字符串中查找指定字符(strchr(p, c) 反向查找)

                strstr(p, p1) 查找字符串

                isalpha() 检查是否为字母字符

                isupper() 检查是否为大写字母字符

                islower() 检查是否为小写字母字符

                isdigit() 检查是否为数字

编程题:从终端输入10个数字(乱序),利用简单选择排序法对这10个数字排序,结果从小到大排列。
(温馨提示:冒泡排序和简单选择排序是两个不同的原理。)

#include <stdio.h>//简单排序法
#include <string.h>
int main()
{
  int  table[10] = {0};
  int  i=0,j=0,ch;
  printf("请输入10个数字:");
  for(i=0;i<10;i++){

    scanf("%d", &table[i]);
  }
  printf("输入的数字是: ");
  for(i=0;i<10;i++){

    printf("%d  ",table[i]);
  
  }
  printf("\n");
  for(i=0;i<9;i++){
     for(j=i+1;j<10;j++) {

		 if(table[i]>table[j])
		 {
		   ch = table[i];
		   table[i] = table[j];
		   table[j] = ch;
		 }

	 }
  }
  printf("简单选择排序后:");
  for(i=0;i<10;i++){

    printf("%d  ",table[i]);
  }
  printf("\n");
  return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值