二维数组,一维字符数组和函数组

二维数组练习

使用二维数组实现杨辉三角

二维数组的转置(行变列,列变行)

​​​​​​​一维字符数组

格式:存储类型 char 数组名[常量表达式]

char str[10];//存储10个字符,整体是一个字符串

字符数组:存储一个或多个字符的容器

字符串:0个或多个字符的整体(标志是'\0',不是双引号,一般字符串多是使用双引号引起来)

char str[10]="hello";
字符数组>字符串,字符数组存储字符串

数组的定义及初始化

定义

char str[10];//存储10个字符,整体是一个字符串

初始化

单字符初始化

char str[5]={'z','b','x','c','v'};//单字符的全部初始化

char str[5]={'z','x'};//单字符的部分初始化,剩余元素使用‘\0’或0填充

char str[]={'z','b','x','c','v'};//省略数组长度,默认是实际元素个数

字符串初始化

char str[5]={"abcd"};//字符串的全部初始化,当双引号引起来,计算机自动添加\0

char str[5]="abcd";//字符串的全部初始化,当双引号引起来,{}可以省略

char str[5]="ab";//字符串的部分初始化,剩余元素使用\0或0填充

char str[5]="";//字符串清0

char str[]="ab";//省略数组长度,默认是实际元素个数加一

字符串错误初始化

char str[5]="abcde";//越界

char str[5];

str[5]="abcd";//数组不支持拐弯赋值

一维字符数组的引用

单字符的引用

使用格式:

char str[]="abcd";//定义字符数组初始化

char str[]="hello";

int i;

// for(i=0;i<strlen(str);i++)

for(i=0;str[i]!='\0';i++)

{

printf("%c",str[i]);

}

return 0;

*strlen(字符数组名);//计算字符串长度,遇到\0结束

格式:

size_t strlen(const char *s);

参数:

s:字符数组变量名

字符串的整体引用

char str[10];

scanf("%s",str); //整体引用占位符需要%s -->%s:从首地址开始读取,直到遇到\0结束

printf("%s",str);//从首地址开始遇到\0结束 return 0;

使用gets/puts实现字符串的输入输出

gets

gets格式:

#include <stdio.h>

char *gets(char *s);

参数:

char *s:表示输入的字符数组变量名

使用格式:

char str[10];

gets(str);

puts(自带换行)

puts格式:

#include <stdio.h>

char *puts(char *s);

参数:

char *s:表示输入的字符数组变量名

使用格式:

char str[10];

puts(str);

scanf和gets的区别

scanf:不可以输入空格,可以输入任意类型,属于格式解析

gets:可以输入空格,只能输入字符串,键盘读取(gets的输入速度快于scanf)

printf和puts的区别

printf:默认没有换行,可以输出一个或多个任意类型,属于格式解析

puts:自带换行,只能输出一个字符串,键盘读取(puts的输出速度快于scanf)

字符数组长度和字符串长度

字符数组长度:实际字符的个数+1,计算\0

字符串长度:计算实际字符的个数,遇到\0结束

是否是字符串

字符数组长度

字符串长度

char str[]={'a','b','c'}

不是

3

随机值

char str[20]={'a','b','c'}

20

3

char str[]="hello"

6

5

char str[20]="hello"

20

5

char str[20]="hel\0lo"

20

3

"abc\0123":\0或者\+0-7的任意三位数都属于八进制,\x属于十六进制,都是一个字符

strlen

非函数实现计算字符串长度

char s[]="hello world";

size_t j,count=0;

for(j=0;s[j]!=0;j++);

printf("%d \n",j);

char s[]="hello world";

size_t j,count=0;

for(j=0;s[j]!=0;j++)

{

count++;

}

printf("%d \n",j,count);

strcpy

非函数实现字符串拷贝

char a[]="hello";

char b[]="world";

int i;

for(i=0;b[i]!=0;i++)//对b进行循环

{

a[i]=b[i];//把b赋值给a

}

a[i]=0;//把多余的字符换为\0

练习

实现两个字符串交换

strcat

非函数实现字符串连接

char a[128]="hello";//要保证字符串a的字符数组长度足够大

char b[]="world";

for(int i=0;a[i]!=0;i++);//循环a

for(int j=0;b[j]!=0;j++)//循环b赋值给a

{

a[i++]=b[j];

}

a[i]=0;

strcmp

非函数实现字符串比较

char s1[]="hello";

char s2[]="hell";

int i=0;

while(s1[i]==s2[i])

{

if(0==s1[i])

break;

i++;

}

int sub=s1[i]-s2[i];

if(sub>0)

puts("s1>s2");

else if(sub<0)

puts("s1<s2");

if(sub==0)

puts("s1=s2");

练习

输入三个字符串,求三个字符串的最大值

练习

输入一个字符串,实现字符串的逆置

输入一个字符串,计算小写,大写,数字,空格的个数

补充函数atoi

非函数实现字符串转换整数

char str[128]="";

gets(str);

int i=0;

while(str[i]=' ') //跳过空格

{

i++

}

int k=i;

if (str[i]=='-'||str[i]=='+') //判断+,-

i++;

int sum=0;

while(str[i])//while(str[i]!='\0')

{

if (str[i]>='0'&&str[i]<='9')

{

sum=sum*10+(str[i]-'0');

}

else

break;

i++;

}

if(str[k]=='-')

sum=-sum;

printf("sum=%d\n",sum);

作业

输入一个字符串,实现空格的删除

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, const char *argv[])
{                                                                             
    char str[128]="";
    gets(str);
    int i,k,a;
    printf("%ld\n",strlen(str));
    int n=strlen(str);
    for(i=0;i<n;i++)
    {
        while(str[i]==' ')                //判断空格
        {
            for(k=i;k<n;k++)
            {
                str[k]=str[k+1];
            }
            i--;
        }   
    }   
    puts(str);
    return 0;
}     

 输入一个字符串计算单词的个数

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, const char *argv[])
{
    char str[128]="";
    gets(str);
    int i,count=0;
    int n=strlen(str);
    printf("%d\n",n);
    for(i=0;i<=n;i++)                                                            
    {
        if(str[i]==' '||str[i]=='\0')                //判断空格
        {
            count++;
        }
    }
    printf("有%d个单词\n",count);
    return 0;
} 

定义一个字符串并初始化“this is book"判断is的个数

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, const char *argv[])
{
    char str[]="this is book";
    int n=strlen(str),count=0;
    for(int i=0;i<n;i++)
    {
        if ('i'==str[i]&&'s'==str[i+1])
            count++;
    }   
    printf("有%d个is\n",count);

            
    return 0;
}           

 输入一个字符串,实现单词的逆置

 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, const char *argv[])
{
    char str[128]="";
    gets(str);
    int head,tail;
    int i=0,j=strlen(str)-1;
    char t,p;
    int m,n;
    while(i<j)
    {
        t=str[i];                                                                                                
        str[i]=str[j];
        str[j]=t;
        i++;
        j--;
    }                                                 //整体逆置
    for(m=0;m<strlen(str);m++)
    {
        if (str[m]!=' ')                             //判断单词的首位下标
        {
            head=m;
            for(n=m;n<strlen(str);n++)
            {
                if (str[n]==' '||str[n]=='\0')       //判断单词最后一位的下标
                {
                    tail=n-1;
                    m=n;
                    break;
                }
            }
            int z,y;
            z=head;
            y=tail;
            while(z<y)                               //完成单词的逆置
            {
                p=str[z];
                str[z]=str[y];
                str[y]=p;
                z++;
                y--;

            }

        }

    }
    puts(str);
    return 0;
}

  • 14
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值