精华内容
下载资源
问答
  • 当我们输出字符串时,是否思考过,假如不知道字符数组的长度,我们应该怎么判断数组结束呢?#define _CRT_SECURE_NO_WARNINGS#include #include #include int main01(){inti;char* array[] = {"nihao","wohenhao",...

    当我们输出字符串时,是否思考过,假如不知道字符数组的长度,我们应该怎么判断数组结束呢?

    #define _CRT_SECURE_NO_WARNINGS

    #include

    #include

    #include

    int main01()

    {

    inti;

    char* array[] = {

    "nihao",

    "wohenhao",

    "nihaoma",

    "woyeshi",

    NULL

    };

    for (i=0; array[i]!=NULL; ++i)

    {

    printf("%s\n", array[i]);

    }

    printf("hello.....\n");

    system("pause");

    return 0;

    }

    int main02()

    {

    inti;

    char* array[] = {

    "hello",

    "hello2",

    "hello3",

    "nihao",

    '\0'

    };

    for (i=0; array[i]!=NULL; ++i)

    {

    printf("%s\n", array[i]);

    }

    printf("hello.....\n");

    system("pause");

    return 0;

    }

    int main03()

    {

    inti;

    char* array[] = {

    "as",

    "dd",

    "chei",

    "nihao",

    0

    };

    for (i=0; array[i]!=NULL; ++i)

    {

    printf("%s\n", array[i]);

    }

    printf("hello.....\n");

    system("pause");

    return 0;

    }

    //下面是错误的,会字符串"\0"不是转义字符,所以不能转义成0

    int main04()

    {

    inti;

    char* array[] = {

    "chenqi",

    "miqi",

    "chenqi",

    "\0"

    };

    for (i=0; array[i]!=NULL; ++i)

    {

    printf("%s\n", array[i]);

    }

    printf("hello.....\n");

    system("pause");

    return 0;

    }

    展开全文
  • 第6章 数组;一维数组的定义引用和初始化;一维数组的引用;二维数组的定义引用及初始化;二维数组是按行存储;二维数组的引用;...字符串和字符串结束标志;字符数组的输入输出;字符串处理函数;字符数组应用举例;
  • 因为在C语言中没有专门的字符串变量,所有字符串的储存都是通过字符串数组来实现的。通常一个字符串就是用一维字符数组来储存的。二维字符数组是用来储存多个字符串,一般是一行数组就是一个字符串。然后我们在使用...

    因为在C语言中没有专门的字符串变量,所有字符串的储存都是通过字符串数组来实现的。通常一个字符串就是用一维字符数组来储存的。二维字符数组是用来储存多个字符串,一般是一行数组就是一个字符串。然后我们在使用字符串数组的时候要注意:字符串数组的结尾都是以’\0’(空字符)结束的,而一般的数组是没有这个的。所以我们在定义字符串数组的长度的时候一般都会多一位,这个多的一位就是用来储存’\0’。为什么要这样呢?原因很简单,因为后面有很多处理字符串的函数都是以这个为标志的,那些函数都是以’\0’来表示处理完了一个字符串,如果没有这个标志的话,那么函数会打印出很奇怪的东西,或者会多打印出来。然后在说下内存的问题,一般一个字符的大小为一个字节,所以一个字符串有多少个字符就占有多少字节,而且这个在内存中的储存是连续的,不过别忘了’\0’,也是占一个字节的。这个’\0’它会占内存不过在打印的时候不会打印出来。
    如何声明一个字符串数组,这个和声明数组是一样的,变量类型 数组名 [数组长度];字符串的变量类型是固定的都是char类型。如何初始化一个字符串数组,这也是比较容易的,就像是上一次初始化普通数组一般,可以部分赋值,那么在多余的地方系统会自动补上’\0’;还有就是全部赋值,不过在最后要加上’\0’。下面用一些例子来说明,比较清晰。二维数组的初始化就不展示了,类似的。不过是多个维度。

    char str1[6] = “hello”;
    char str2[6] = {“hello”};
    char str3[6] = {‘h’,‘e’,‘l’,‘l’,‘o’};
    char str4[  ] = {‘h’,‘e’,‘l’,‘l’,‘o’};  //这个要注意,一般都不会用这个定义的,因为这个末尾不会有’\0’。
    char str5[  ] = {‘h’,‘e’,‘l’,‘l’,‘o’,’\0};
    
    

    然后就是对于引用其中一个字符,也是通过索引下标的方法(不过字符串一般不会单个字符使用)。
    下面重点是介绍一下对于字符串数组的处理函数。
    在我们的C语言的库中有很多的函数库都是用来处理字符串数组的,我们马上就来介绍几个常用的函数。

    gets()函数

    字符串输入函数(头文件:#include <stdio.h>)
    ①函数原型:char *gets(char *buffer); 这个buffer是存放输入数据的首地址。
    ②返回值:成功时返回输出缓冲区首地址,否则返回NULL
    ③功能说明:是接受通过标准输入所获得的字符串的最简单的方法;它接受按下回车键以前输入的所有字符(包括空格);并用“\0”字符替换末尾的换行符“\n”。
    这个函数的存放的数组的大小一定要注意,不然很容易越界。

    #include <stdio.h>
    char name[50]={0};
    get(name);
    
    

    puts()函数

    字符串输出函数 (头文件:#include <stdio.h>)
    ①函数原型:int puts(const char *string); string是要输出字符的首地址(必须是地址)。
    ②返回值:成功时返回最后一个字符的ASCII码(’\n’),否则返回EOF
    ③功能说明:用于在标准输出设备上显示字符串,并把末尾的字符串结束符 “\0”替换成换行符“\n”字符输出
    这个函数在输出的时候,会自动输出换行符,也就是会自动换行。

    puts(name);
    

    sprintf()函数

    格式化输出到字符串 (头文件:#include <stdio.h>)
    ①函数原型:int sprintf( char *buffer, const char *format [, argument] … )
    ②函数参数:buffer是字符数组名,就是最后输出的字符串。format是格式化字符串。
    ③返回值: buffer中字符的个数 ,否则返回EOF。
    ④函数功能:将其他数据类型转换成字符串类型并输出到指定字符串中.
    在这个格式化字符串之中,一般会用符号隔开每个字符串,目的是方便后面的拆分。这边的buffer一定要足够大,不然也会容易出现数组下标越界的情况。

    sprintf(buf,%s-%s”, name, pwd);
    sprintf(buf,%s %s”, name, pwd);
    // 这边用空格隔开是因为,在后面使用拆分函数的时候,这个空格会自动换成‘\0’。
    //这边我们可以看出,这个函数在拼接的时候也是以’\0’表示一个字符串,
    //也就是在识别到’\0’的时候表示这个字符串结束,不在继续把这个字符串放入到buffer中,
    //转向下一个字符串。不过这边我们可以自己去写一个拆分函数,让他按我们的想法拆分字符串。
    

    sscanf()函数

    这个函数就是用来拆分函数的,一般是与上面的函数组合使用。格式如下:

    sscanf(buf,%s %s”, pname, ppwd);
    

    这边也是要注意使用空格来拆分,可以防止拆开来的pname和ppwd或出错,这个函数也是拆分的时候只有遇到‘\0’才会结束一个字符串的拆分。不过“%s %s”这个东西一般和上面那个sprintf函数中的一样就可以了。

    下面介绍一些处理字符串的方法,这些方法要先引入头文件 #include <string.h>

    ①strlen函数

    函数功能:确定字符串的长度,不包括“\0”的长度
    函数原型:int strlen(const char *string);
    函数参数:string这个是字符串的首地址
    返回值:字符串实际长度,即字符串中‘\0’之前的字符个数。

    ②strcpy函数

    函数功能:将一个字符串中的值复制到另一个字符串中
    函数原型:char* strcpy(char *dest,const char *source);
    函数参数:dest是目标字符的首地址,source是要复制字符串的首地址。
    返回值:成功时返回dest,否则返回NULL
    要注意的是,这个dest目标字符串一定要足够大。
    这边在扩展一个函数:strncpy(dest, source,num);这个函数也是复制函数,与strcpy一样,不相同的是这个函数可以控制复制字符的个数,这个num参数就是控制这个字符个数的,表示复制几个字符。
    source这个字符串复制到dest,那么就会覆盖掉dest之中的字符串,当然这个覆盖多少,取决于source字符串的长度。

    ③strcat函数

    函数功能:将两个字符串连接成一个字符串(将source 接到dest的末尾)
    函数原型:char *strcat(char *dest,const char *source);
    函数参数:dest–目标字符串首地址, source—要连接的字符串的首地址
    返回值:成功时返回连接成功后的首地址即dest,否则返回NULL
    这边要注意的是,这个dest的长度必须足够大。函数在结束的时候会在dest最后保留一个 ‘\0’。

    ④strcmp函数

    函数功能:比较两个字符串并根据比较的结果返回一个整数值
    函数原型:int strcmp(const char *str1,const char *str2);
    函数参数:str1—字符串1的首地址,str2—字符串2的首地址.
    返回值:有三种情况如果 1. str1<str2,则返回值小于零;2. 如果 str1 与 str2 相同,则返回值等于零;3. 如果 str1>str2,则返回值大于零。
    比较原则:从左至右逐个对应字符按其 ASCII码值大小相比较,直到出现不同的字符或遇到‘\0’为止。
    这个可以用在做用户登录的时候。

    ⑤ strchr()函数

    函数功能:判断某个字符是否在字符串中出现
    函数原型:char* strchr(const char *str,char ch);
    函数参数:str–要查找的字符串首地址, ch—要查找的字符
    返回值:如果该字符在字符串中出现,将返回对应这个字符(由 chr 所指向的)在字符串 str 中第一次出现的指针。如果未出现,则返回 NULL

    ⑥一些其他函数

    strlwr函数
    其一般形式为:strlwr (字符串)
    strlwr函数的作用是将字符串中大写字母换成小写字母。
    strupr函数
    其一般形式为:strupr (字符串)
    strupr函数的作用是将字符串中小写字母换成大写字母。

    再介绍一些处理单个字符的函数

    头文件:#include < ctype.h >
    注意这个的ch是指单个字符,不是字符串。
    在这里插入图片描述

    展开全文
  • C语言字符数组自我结束标志

    千次阅读 2015-12-17 17:18:22
    字符数组的自我结束标志 当我们输出字符串时,是否思考过,假如不知道字符数组的长度,我们应该怎么判断数组结束呢?#define _CRT_SECURE_NO_WARNINGS #include #include #include int main01() { int i; ...
    字符数组的自我结束标志
    当我们输出字符串时,是否思考过,假如不知道字符数组的长度,我们应该怎么判断数组结束呢?
    #define  _CRT_SECURE_NO_WARNINGS 
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main01()
    {
    	int			i;
    	char* array[] = {
    		"nihao",
    		"wohenhao",
    		"nihaoma",
    		"woyeshi",
    		NULL
    	};
    	for (i=0; array[i]!=NULL; ++i)
    	{
    		printf("%s\n", array[i]);
    	}
    	printf("hello.....\n");
    	system("pause");
    	return 0;
    }
    
    int main02()
    {
    	int			i;
    	char* array[] = {
    		"hello",
    		"hello2",
    		"hello3",
    		"nihao",
    		'\0'
    	};
    	for (i=0; array[i]!=NULL; ++i)
    	{
    		printf("%s\n", array[i]);
    	}
    	printf("hello.....\n");
    	system("pause");
    	return 0;
    }
    
    int main03()
    {
    	int			i;
    	char* array[] = {
    		"as",
    		"dd",
    		"chei",
    		"nihao",
    		0
    	};
    	for (i=0; array[i]!=NULL; ++i)
    	{
    		printf("%s\n", array[i]);
    	}
    	printf("hello.....\n");
    	system("pause");
    	return 0;
    }
    
    
    //下面是错误的,会字符串"\0"不是转义字符,所以不能转义成0
    int main04()
    {
    	int			i;
    	char* array[] = {
    		"chenqi",
    		"miqi",
    		"chenqi",
    		"\0"
    	};
    	for (i=0; array[i]!=NULL; ++i)
    	{
    		printf("%s\n", array[i]);
    	}
    	printf("hello.....\n");
    	system("pause");
    	return 0;
    }
    展开全文
  • 题目描述 计算A+B 输入 输入数据有多组。 每组一行,为整数A, B。...注:EOF是宏定义常量-1,scanf函数遇到文件结束标志函数返回值是-1,键盘输入时,ctrl+z表示输入结束 本题标程: #include"stdio.h

    题目描述
    计算A+B
    输入
    输入数据有多组。
    每组一行,为整数A, B。
    输出
    对每行输入,输出A+B的值,单独占一行。
    样例输入 Copy
    1 2
    3 4
    样例输出 Copy
    3
    7
    提示
    此类多实例测试解决方案:
    while(scanf("%d%d",&a,&b)!=EOF)
    {
    //读入一组测试数据
    //处理
    //输出结果
    }
    注:EOF是宏定义常量-1,scanf函数遇到文件结束标志函数返回值是-1,键盘输入时,ctrl+z表示输入结束
    本题标程:
    #include"stdio.h"
    int main()
    {
    int a,b;
    while(scanf("%d%d",&a,&b)!=EOF)
    {
    printf("%d\n",a+b);
    }
    return 0;
    }

    #include<stdio.h>
    #include<math.h>
    
    int main()
    {
    	int a,b,i=1,s;
    	int h[1000];//存放多组数据
    	while(scanf("%d%d",&a,&b)!=EOF)
    	{
    		h[i]=a+b;
    		i++;
    		s=i;
    	}
        for(i=1;i<s;i++)
        {
        	printf("%d\n",h[i]);//逐个输出存放值
    	}
        return 0;
    }
    
    
    展开全文
  • 文章目录字符串和字符串结束标志字符数组的输入输出用scanf函数输入使用字符串处理函数puts函数——输出字符串的函数gets函数——输入strcat函数——字符串连接符strcpy和strncpy函数——字符串复制函数strcmp函数...
  • c语言 指针数组

    2015-04-07 13:07:54
    字符数组:数组长度和存储长度不一样,除了存储内容外,字符数组将'\0'作为字符数组结束标志,存储长度是数组长度加一。 通过strlen()算出的数组长度是内容长度,是存储长度减一。 指针数组: int *p[3]={1,2,3} ...
  • C语言字符数组

    2020-01-26 11:40:27
    1 字符数组初始化 ... //系统默认在字符串后面加上一个字符串结束标志符'\0',所以最少需要6个长度的字符数组才能容纳 1.2字符数组长度由初始化字符或字符串长度确定 EG: char s1[] = { 'C...
  • c语言中的字符数组自我结束标记

    千次阅读 2019-10-22 20:38:27
    c语言中的字符数组结束标志。 NULL, 0, '\0' 其效果是一样的。 int main() { //定义数组指针的第一种类型 //char* array[] = { "aaa","bbb","ccc","ddd" ,'\0'}; //char* array[] = { "aaa","bbb","ccc",...
  • c语言-数组学习总结(2)C语言字符数组和字符串详解字符串结束标志(划重点)字符串长度 C语言字符数组和字符串详解 用来存放字符的数组称为字符数组,例如: char a[10]; //一维字符数组 char b[5][10]; //二维字符...
  • ## # 数组中,怎么以-1为结束标志,但不作为读取数。 输入一组数据以后,以-1作为结束标志,但是每次-1也会作为读取书参与运算,该怎么办? **比如这题:** 输入一组数据(不超过20个),存入数组中,并找出...
  • C语言数组长度

    千次阅读 2018-12-02 19:51:46
    我们很苦恼的是,C语言不像JAVA那样把所有的方法都给我们封装好了,我们可以直接拿来用。那么我们该如何求一个未满的数组的长度呢?下面给你一个方法: #include&...表示的是数组存放元素结束标志 r
  • char a[5] = “hello” × , **因为字符串隐含结束标志 ‘\0’**所以越界 char a[6] = “hello” √ char a[32] = {0} 字符数组定义的时候记得初始化 注意:字符串用双引号,字符用单引号 2.输入打印 char a...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 425
精华内容 170
关键字:

c语言数组结束标志

c语言 订阅