C语言字符串学习总结


字符串:实质就是多个字符序列,有多个字符组成

    c语言中是没有string这种类型的,通常在C中是用字符数组来存储字符串的。字符串可以看做一个特殊的字符数组,为了和普通的数组分开,故在字符串的尾部加上一个结束标志“\0”,“\0”是一个ASCII码值为0的字符,是一个空的操作符,表示什么也没有,所以采用字符数组存放字符串,赋值时就应该包含结束标志“\0”。

字符串的初始化:

char a[] = “123”;  和 char a [] = {‘1’,’2’,’3’};的区别:

“123”其实是由’1’、’2’、’3’、’\0’组成

“123”的存储分布

字符串的输出”%s”,’\0’是不会输出的

#include<stdio.h>
int main()
{
    char name[] = "itcast";
    
    /*
    int size = sizeof(name);
    
    printf("%d\n",size);
    */
    return 0;
}

//字符串初始化
void test2()
{
    //\0的ASCII码的值是0
    char name[8] = "it";
    char name2[8] = {'i','t','\0'};
    char name3[8] = {'i','t',0};
    char name4[8] = {'i','t'};  //最好不要这样写,没有\0结尾不是字符串
    
    char name5[] = {''i,'t'};  //不是字符串,只能说是普通字符数组
}

void test()
{
    //"jack" == 'j' +'a' +'c' + 'k'
    char name[10] = "jack8888\n";
    
    //把数组传进去仅仅是个警告
    printf(name);
    
    printf(name);
    
    printf(name);

}


#include<stdio.h>
int main()
{
    char name[] = "it";
    
    char name2[] = {'o','k'};
    
    printf("%s\n",name);  //输出结果it
    
    printf("%s\n",name2);  //输出结果itok,内存分析如下:
    
    return 0;
}

%s表示期望输出一个字符串,因此printf函数会从b的首地址开始按顺序输出字符,一直到\0字符为止,因为\0是字符串的结束标记。所以,如果想要创建一个字符串,记得加上结束符\0

常用字符串处理函数:


      strlen:计算字符串长度    声明在#include<string.h>中计算的是字符数,并不是字数,一个汉字算作3个字符,计算的字符不包括\0,从某个地址开始数字符的个数,直到遇到\0为止

/*
strlen函数:计算字符串长度
 1.计算的是字符数,并不是字数。一个汉字算作3个字符
 2.计算的字符不包括\0
 3.从某个地址开始数字符的个数,直到遇到\0为止
*/

// strlen函数声明在string.h文件中
#include <string.h>
#include <stdio.h>

int main()
{
    //int size = strlen("哈haha");

    //printf("%d\n", size);
    /*
    char name[] = "itcast";
    char name2[] = {'0', '\0', '6'};
    
    int size = strlen(name2);
    
    printf("%d\n", size);
    */
    
    char name[] = "itcast";
    
    //printf("%s\n", name);
    
    printf("%c\n", name[3]);
    
    
    return 0;
}


字符串的输出:

    可以使用stdio.h中两个函数来输出字符串,分别是printf和puts函数

printf函数:用%s表示需要输出一个字符串

char a[3] = {'i', 't', '\0'};
printf("%s",a);


puts函数:puts函数输出一个字符串后会自动换行, puts函数一次只能输出一个字符串,printf函数则可以同时输出多个字符串


字符串的输入:

     stdio.h中有2个函数可以用来接收用户输入的字符串,分别是scanf和gets

scanf函数:

char a[10];
scanf("%s",a);


scanf函数会从a的首地址开始存放用户输入的字符,存放完毕后,系统会自动在尾部加上一个结束标记\0,注意,不要写成scanf("%s", &a),因为a已经代表了数组的地址,没必要再加上&这个地址运算符。

gets函数:

char a[10];
gets(a);

gets跟scanf一样,会从a的首地址开始存放用户输入的字符,存放完毕后,系统会自动在尾部加上一个结束标记\0。

gets一次只能读取一个字符串,scanf则可以同时读取多个字符串

gets可以读入包含空格、tab的字符串,直到遇到回车为止;scanf不能用来读取空格、tab


字符串数组:

使用场合:

 一维字符数组中存放一个字符串,比如一个名字char name[20] = "mj"

 如果要存储多个字符串,比如一个班所有学生的名字,则需要二维字符数组,char names[15][20]可以存放15个学生的姓名(假设姓名不超过20字符)

 如果要存储两个班的学生姓名,那么可以用三维字符数组char names[2][15][20]

初始化

char names[2][10] = { {'J','a','y','\0'}, {'J','i','m','\0'} };  

char names2[2][10] = { {"Jay"}, {"Jim"} };  

char names3[2][10] = { "Jay", "Jim" };

#include <stdio.h>
int main()
{
    char name[] = "jack";
    
    char name1[] = "rose";
    
    char name2[] = "jim";
    
    char name3[] = "jake";
    
    char names[2][10]= {"jack", "rose"};
    
    //printf("%s\n", names[0]);
    
    //printf("%c\n", names[0][3]);
    
    char names2[2][10] =
    {
        {'j', 'a', 'c', 'k', '\0'},
        {'r', 'o', 's', 't', '\0'}
    };
    
    
    return 0;
}



  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值