【无标题】数组的应用——综合案例

内容提要
数组
字符相关操做
综合案例:学生成绩管理系统
数组
字符数组
字符串的基础操作
字符串拼接
语法: strcat( 数组名 (“ 字符串 1”), 需要拼接的字符串 (" 字符串 2"));
引用: string.h
#include <stdio.h>
#include <string.h>
int main ( int argc , char * argv [])
{
char name [ 20 ];
printf ( " 请输入您的姓名 :\n" );
fgets ( name , sizeof ( name ) / sizeof ( char ), stdin ); // 通过外设输入(键盘)
fputs ( strcat ( name , " 快跑! " ), stdout ); // 输出数据到外设(显示器)
//puts(strcat(name," 快跑! "));// 输出数据到外设(显示器)
// fputs(strcat(" 你好 ",name),stdout);// 输出数据到外设(显示器)
return 0 ;
}
注意:
字符串 1 必须是字符数组,的长度必须足够大,以便于能够容纳被链接的字符串。
连接后系统将自动取消 字符串 1 后面的结束符 \0
字符串 2 可以是字符数组名,也可以是字符串常量,如: strcat(s1,"def"); strcat(s1,s2);
字符串拷贝
语法: strcpy( 数组名 , 字符串 )
引入: string.h
说明:这个函数适合给字符串赋值
char str [ 20 ] = "张三 " ; // 正确,字符数组的初始化
char str [ 20 ]; str = "李四 " ; // 错误,我们不能对字符数组进行字符串赋值
char str [ 20 ]; strcpy ( str , "王二 " ); // 正确,借助函数完成字符数组的赋值
案例:
#include <stdio.h>
#include <string.h>
int main ( int argc , char * argv [])
{
char name [ 20 ];
printf ( " 请输入您的名字: \n" );
fgets ( name , sizeof ( name ) / sizeof ( char ), stdin );
// 重新赋值
strcpy ( name , " 孙成龙 " );
printf ( " 同学的名字叫 %s\n" , name );
return 0 ;
}
字符串比较
语法: strcmp( 字符串 1, 字符串 2) 字符串可以是常量,也可以是字符数组
引入: string.h
功能:比较两个字符串对应的位置字符 ASCII 的大小(字典顺序比较)
返回值:
若 字符串 1 等于 字符串 2 ,返回 0
若 字符串 1 大于 字符串 2 ,返回正数( >0
若 字符串 1 小于 字符串 2 ,返回负数( <0
说明:
执行这个函数时,自左到右逐个比较对应字符的 ASCII 的值,直到发现了不同字符或字符串结
束符 '\0' 为止。
对字符串不能用数值型比较符。比如: "abc" == "abc" ,这种比较是错误的
字符串 1 与字符串 2 可以是字符数组,也可以是字符串常量。
案例:
#include <stdio.h>
#include <string.h>
int main ( int argc , char * argv [])
{
// 创建两个数组,用来存放用户和帐号
char username [ 20 ], password [ 8 ];
printf ( " 登录 " );
printf ( " 请输入您的账户: \n" );
scanf ( "%s" , username );
printf ( " 请输入您的密码: \n" );
scanf ( "%s" , password );
// 校验
if ( ! strcmp ( username , "admin" ) && ! strcmp ( password , "123456" ))
{
printf ( " 登录成功! \n" );
}
else
{
printf ( " 账户或者密码错误 !\n" );
}
return 0 ;
}
字符串长度
语法: strlen( 字符串 )
引用: string.h
注意:返回字符串中包含的字符的实际个数,不含 \0
案例:
#include <stdio.h>
#include <string.h>
void test01 ()
{
char username [ 20 ];
printf ( " 请输入您的账户: \n" );
scanf ( "%s" , username );
// 获取字符串长度
unsigned long len = strlen ( username ); // 排除 \0 hello\0,he\0llo\0
if ( ! strcmp ( username , "admin" ))
{
printf ( " 账户输入正确! %lu\n" , len );
}
else
{
printf ( " 账户输入错误! %lu\n" , len );
}
}
int main ( int argc , char * argv [])
{
test01 ();
return 0 ;
}
案例 1
输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。 I LOVE YOU
分析:采用通过空格统计单词的方法。具体是:
用连续若干个空格算一个、一行开头的空格不计的方法决定单词数目;
从第一个字符开始逐个检查字符串中的每一个字符。若查到某一字符非空格,而其前面的字
符是空格,则表示新单词开始,让计数变量 num++ 。否则,当前字符非空格,前面字符也非空
格,则非新单词, num 不变;
用变量 word=0 1 来表示前面字符是空格或不是空格。则:
代码:
#include <stdio.h>
void main ()
{
char string [ 81 ];
int i , num = 0 , word = 0 ; // num :计数, word :单词个数校验
char c ;
fgets ( string , 81 , stdin ); /* 从键盘输入一个字符串, I LOVE YOU*/
for ( i = 0 ;( c = string [ i ]) != '\0' ; i ++ ) /* 从第一个字符开始判断是否串尾 */
{
if ( c == ' ' ) word = 0 ; /* 如不是串尾,若是空格 I LOVE YOU*/
else if ( word == 0 ) /* 如不是串尾、不是空格,而前一字符是空格 */
{
word = 1 ;
num ++ ;
} /* 是新单词,计数 */
}
printf ( "There are %d words in this line.\n" , num );
}
案例 2
有三个字符串,要求找出其中最大者。
分析:设计一个二维字符数组 str 3 ,即 3 20 列。
可把 str[0] str[1] str[2] 看作 3 个一维字符数组,各有 20 个元素;
gets 函数分别输入 3 个字符串到 str[0] str[1] str[2] 中 ;
用字符串函数对 str[0] str[1] str[2] 进行比较,得到最大者。
#include <stdio.h>
#include <string.h>
void main ( )
{
char max [ 20 ];
char str [ 3 ][ 20 ]; // 输入 3 个字符串 {"abc","bbc","ccc"}
int i ;
// 完成初始化
for ( i = 0 ; i < 3 ; i ++ )
gets ( str [ i ]); /* 输入 3 个字符串 */
// fgets(str[i],20,stdin)
if ( strcmp ( str [ 0 ], str [ 1 ]) > 0 ) /* 比较,若串 0> 1*/
strcpy ( max , str [ 0 ]); /* 把串 0 存入 string*/
else
strcpy ( max , str [ 1 ]); /* 否则,把串 1 存入 string*/
if ( strcmp ( str [ 2 ], max ) > 0 ) /* 再比较,若串 2>string*/
strcpy ( max , str [ 2 ]); /* 把串 2 存入 string ,否则 string 不变 */
printf ( "\nthe largest string is:\n%s\n" , max ); /* 输出 string*/
}
总结
数组是有序数据的集合。数组中的所有元素都必须是同类型的。用一个统一的名字和下标来唯
一的确定元素在数组中的位置。在程序中把循环和数组结合起来,对数组元素进行操作,可有
效地处理大批量的数据,提高工作效率。
正确定义数组。注意:元素的下标默认从 0 开始、防止下标越界。
注意数组的定义形式和数组元素的引用形式的本质区别。
二维数组元素在内存中按行存储。初始化时,按行赋值。
C 语言中无字符串变量,字符串是以字符数组形式存放的。系统在每个串尾自动加一个串结束
‘\0’ ,但 ‘\0’ 不是字符串的组成部分。将含 n 个字符的串存入数组中时,数组长度应 ≥n+1
字符串的运算要用字符串函数进行,要包含 “string.h” 头文件。
由基本类型的数据按一定规则构成的数据称为构造类型数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值