小白学习日记之字符的赋值

本文详细介绍了在编程中单个字符与字符串的多种赋值方法,包括直接赋值、ASCII码赋值、十六进制赋值等,并探讨了字符串整体与逐个赋值的区别及注意事项。

字符的输入可分为单个字符的赋值及字符串的赋值,此处分开就就讨论。
单个字符的赋值
这里只讨论直接赋值,以输入字符A为例,字母A的ASCII码八进制为101,十进制为65,十六进制为41。
令c为单个字符型变量(char c;),将A赋值给c有如下办法:
c=‘A’;
c=’\101’; //八进制,反斜杠+1~3位数字,注意有单引号;
c=65; //十进制,注意此时不用单引号,也不用反斜杠,
c=0101; //八进制;
c=0x41; ;//十六进制;
c=’\x41’; //十六进制,反斜杠+x+两位数字,注意有单引号;

综上,单个字符的输入办法有4种,反斜杠这类在字符串中也可使用,讨论以上办法不是为了用花里胡哨的方法进行输入,而是要明白,单个字符它可以转化为整数,并且在ASCII码中0~9,a~z,A~Z,是连续的,也就是当读取字符c,其值为字符9,可以通过c-'0’这个式子得到整数型9等,当然他还有其他的运用,以后一空想到再一一补上。

字符串的赋值
字符串的赋值可以单个地赋值,也可以整体赋值,此处分开讨论。

整体赋值只能在定义字符的时候进行,不能分开进行。
比如char a[]=“hello!”; 注意,此处用双引号,长度可以不写,如果要写则应该写char a[7]=“hello!”;这是因为除了内容本身占用六个字符外,还需有一个字符储存标识结束的字符’\0’,但此时用strlen(a)查询变量长度,则度还是6。这个在逐个赋值上也一样,如果最终赋值的字符数量为n,则字符串的长度应至少为 n+1。
char a[]="\150\145\154\154\157\041";可以达到和上面同样赋值的效果,转义在字符串中同样有作用。

逐个赋值同单个字符串赋值差不多,此处不过多讨论,需强调的是,字符串的下标从0从开始,整体赋值系统会在末尾自动添加’\0’,标识结尾,单个赋值后,需自己添加末尾结束符。如赋值完hello!后,需在操作a[6]=’\0’;另外a[n]本质是一个指针,并不能识别其范围是否超过了定义,比如定义了字符串的长度为7,但是对a[7],a[8]进行赋值,系统不会报错,在这些地址的内容没有被其他程序改写前甚至可以正常调用,但是其危害是十分明显的,a[7],a[8]有可能被其他程序改写,造成信息的丢失。比如:
char a[7]="hello!";//此时a占有的空间是7个字符,长度为6; a[6]=65; a[7]=65; a[8]='\0'; printf("字符串内容是:--%s\n--字符串长度是:%d\n--字符串a占用的空间是%d个字符\n",a,strlen(a),sizeof(a)/sizeof(char));这些操操作后,printf的结果为字符串内容是:
–hello!AA
–字符串长度是:8
–字符串a占用的空间是7个字符

日记 作者 郑珺 单位 浙江传媒学院 小朋友有写日记的习惯,但有一个奇怪的规定,日记中不能出现字符#。 (1)编写一个类DiaryBook表示日记本,包含以下成员 ①属性: author:私有,String型,表示作者。 content:私有,String型,表示日记本中的内容。 ②方法: DiaryBook(String author),构造方法,用参数初始化姓名,将内容初始化空字符串; DiaryBook(String author, String content),构造方法,用参数分别初始化作者和内容; 为author和content添加getter和setter方法。 write(char c)方法,往日记内容中写入一个字符。如果c是#号,抛出IllegalArgumentException异常;否则,往content末尾添加字符c; write(String newContent)方法,往日记内容中写入一个字符串。调用write(char c)方法,将字符串中的字符依次写入日记中;一旦捕捉到异常,终止写操作;无论是否有异常,都要往日记内容末尾添加一个换行符; boolean equals(Object obj)方法,比较当前对象和参数obj是否相等,如果obj是日记本对象,返回当前对象和obj的内容是否完全相同;如果obj不是日记本对象,返回false。 一个toString()方法,返回日记本的作者和内容等信息。 (2)构造一个Main类。 在main方法中,为小明和小白各创建一个日记本对象。小明的日记本内容初始为空字符串,随后往其中写入5行文字。小白的日记本内容初始就有一行文字,随后往其中写入4行文字。 最后比较并输出两者的日记内容是否相同。 import java.util.Scanner; class DiaryBook { private String author; private String content; public DiaryBook(String author) { this.author = author; } public DiaryBook(String author, String content) { this.author = author; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public void write(char c) { if(c != ) { content += c; } else { new IllegalArgumentException("日记中不能出现#号!"); } } public void write(String newContent) { { for (int i = 0; i < newContent. ; i++) { write(newContent. ); } } catch ( e){ System.out.println("出现异常:" + .getMessage()); } { content += ; } } @Override public boolean equals(Object obj) { if(obj DiaryBook){ return content.equals( ); } else { return ; } } @Override public String toString() { return author + "的日记:\n" + content; } } public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); DiaryBook a = new DiaryBook("小明"); for(int i = 0; i < 5; i++){ a.write(scanner.nextLine()); } System.out.println(a); DiaryBook b = new DiaryBook("小白", scanner.nextLine() + "\n"); for(int i = 0; i < 4; i++){ b.write(scanner.nextLine()); } System.out.println(b); if( ){ System.out.println("两本日记完全相同"); } else { System.out.println("两本日记不同"); } } } 输入样例: 6月11日,今天复习了类和对象 6月12日,今天复习了继承#和多态 6月13日,明天要考试? 6月14日,今天要考Java#? 6月15日,昨天考的是Java? 6月11日,今天复习了类和对象 6月12日,今天复习了继承 6月13日,明天要考试? 6月14日,今天要考Java 6月15日,昨天考的是Java? 输出样例: 出现异常:日记中不能出现#号! 出现异常:日记中不能出现#号! 小明的日记: 6月11日,今天复习了类和对象 6月12日,今天复习了继承 6月13日,明天要考试? 6月14日,今天要考Java 6月15日,昨天考的是Java? 小白的日记: 6月11日,今天复习了类和对象 6月12日,今天复习了继承 6月13日,明天要考试? 6月14日,今天要考Java 6月15日,昨天考的是Java? 两本日记完全相同
最新发布
11-19
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值