《黑马程序员》 字符串 (C语言)

字符串的基本使用

定义方法:

char name[10] ="jack";   此时字符串中共包含‘j’,’a‘,'c','k','\0'

中括号中的10代表该字符串最多存放10个字符

字符串的输出

1.printf("jack");

2.printf(name);              //把数组传入printf语句输出会出现警告        

这两种方法输出结果相同,但printf语句默认情况下只认字符串常量,所以第二种方法在编译时会出现警告

字符串的存储细节:

数组name中共占用8个字节,含有三个元素分别为'i','t','\0'

char name[8] ="it";

char name2[8] = {'i','t','\0'};

char name3[8] = {'i','t',0};

三种写法效果相同

注:因’\0‘的ASCII值为0,故’\0‘与0等价

修改数组内元素的值

name[1] = 'q';      //把数组内第2个元素的值改为q;

\0的作用

\0为字符串的结束标志

1
2
3
4
5
6
7
8
9
#include <stdio.h> 
int main()
{
  char name[] ="it";
  char name2[] ={'o','k'};
  printf("%s\n",name2);
  return 0;
}
<br>运行结果:okit

数据内存如下所示

strlen函数

作用:用来计算字符串的长度,strlen函数声明在<string.h>文件中,计算的是字符数并不是字数,计算的字符不包括尾部的"\0"

 

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h> 
#include <string.h>
int main()
{
    char name[] ="haha";                 //定义一个字符串数组
    int size1 =strlen(name);             //计算字符串的长度      不包含"\0"
    int size2 =sizeof(name);             //计算字符串的占用字节数,包含"\0"
        printf("%d\t%d\n",size1,size2);      //输出
        return 0;
}
运行结果:4 5

 代码练习1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
//字符串数组
int main()
{
    //一维数组
    char  name[] ="haha";
    char name1[] ="rose";
    char name2[] ="jim";
    char name3[] ="jake";
    //二维数组
    //第一种方法
    char name[2][10] = {"jake","rose"};
    //第二种方法
    char name[2][10] =
    {
        {'j','a','k','e','\0'};
        {'r','o','s','e','\0'};
    };
        return 0;
}

  代码练习2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <string.h>
/*编写一个函数char_contains(char str[],char c),如果字符串中str中包含字符C,
则返回数值1,否则返回数值0.
*/
int char_contains(char str[],char c)
{
    int i;
    //遍历数组内所有元素,检测数组内是否包含字符C
    for(i = 0;i < strlen(str);i++){
        if(str[i] ==c){
        //返回数值1
        return 1;
        }
    }
    return 0;
}
int main()
{  
    char  str[]="itcast";
    int result = char_contains(str,'c');
    printf("%d\n",result);
    return 0;
}

 代码练习3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <string.h>
int main()
{
    int i;
    char str[] = "cha zhao zui  chang de  zifuchuan  danci ";
    int maxCount = 0;                                      // 记录最长单词的长度
    int GB = 0;                                            // 记录单词尾字符下标
    for (i = 0; i < strlen(str); ++i) {
        int count = 0;                                     // 记录新单词长度
        while (str[i] != ' ' && str[i]) {                  // 字符不是空格也不是\0的时候开始记录单词长度
            ++i;                                          
            ++count;                                    
        }
        if (count > maxCount) {                             //此段if语句的最用是更新最长单词的长度    
            maxCount = count;
            GB = i - 1;
        }
    }
    printf("最长单词是:");
    for (i = GB - maxCount + 1; i <= GB; ++i){
        printf("%c", str[i]);                                //输出最长单词
    }
    printf("\n");                                            //换行
    return 0;
}

 

posted @   深海同志  阅读(173)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 如何基于DeepSeek开展AI项目
点击右上角即可分享
微信分享提示