文档库 最新最全的文档下载
当前位置:文档库 › 第05章 字符与字符串

第05章 字符与字符串

第05章 字符与字符串
第05章 字符与字符串

第5章字符与字符串

目标

学习完本章之后,你应该能够掌握以下概念:

字符

字符串

StringBuilder

引言

字符数据类型是C#中的基本数据类型,字符串类型是C#中的引用数据类型,本章将讲述如何使用字符和字符串类型。

5.1字符

char 关键字用于声明下表所示范围内的Unicode 字符。Unicode 字符是16 位字符,用于表示世界上多数已知的书面语言。

5.1.1标识符

char 类型的常数可以写成字符、十六进制换码序列或Unicode 表示形式。您也可以显式转换整数字符代码。以下所有语句均声明了一个char 变量并用字符X 将其初始化:例如:

char char1 = 'Z'; // Character literal

char char2 = '\x0058'; // Hexadecimal

char char3 = (char)88; // Cast from integral type

char char4 = '\u0058'; // Unicode

5.1.2转换

char 可以隐式转换为ushort、int、uint、long、ulong、float、double 或decimal。但是,不存在从其他类型到char 类型的隐式转换。

5.1.3功能

Char 结构提供了执行以下操作的方法:比较Char 对象;将当前Char 对象的值转换为其他类型的对象;确定Char 对象的Unicode 类别。

(1)使用CompareT o和Equals方法可比较Char 对象。

(2)使用ConvertFromUtf32方法可将码位转换为字符串。使用ConvertT oUtf32方法可将Char 对象或Char 对象的代理项对转换为码位。

(3)使用GetUnicodeCategory方法可获取字符的Unicode 类别。使用IsControl、

IsDigit、IsHighSurrogate、IsLetter、IsLetterOrDigit、IsLower、IsLowSurrogate、IsNumber、IsPunctuation、IsSeparator、IsSurrogate、IsSurrogatePair、IsSymbol、IsUpper 和IsWhiteSpace 方法可确定字符是否属于特定的Unicode 类别,如数字、字母、标点、控制字符等。

(4)使用GetNumericV alue 方法可将表示数字的Char 对象转换为数值类型。使用Parse 和TryParse 可将字符串中的字符转换为Char 对象。使用ToString 可将Char 对象转换为String 对象。

(5)使用T oLower、T oLowerInvariant、T oUpper和T oUpperInvariant方法可更改Char 对象的大小写。

例子

using System;

public class CharStructureSample {

public static void Main() {

char chA = 'A';

char ch1 = '1';

string str = "test string";

Console.WriteLine(https://www.wendangku.net/doc/d18710805.html,pareTo('B'));// Output: "-1" (meaning 'A' is 1 < 'B')

Console.WriteLine(chA.Equals('A')); // Output: "True"

Console.WriteLine(Char.GetNumeric V alue(ch1)); // Output: "1"

Console.WriteLine(Char.IsControl('\t')); // Output: "True"

Console.WriteLine(Char.IsDigit(ch1)); // Output: "True"

Console.WriteLine(Char.IsLetter(',')); // Output: "False"

Console.WriteLine(Char.IsLower('u')); // Output: "True"

Console.WriteLine(Char.IsNumber(ch1)); // Output: "True"

Console.WriteLine(Char.IsPunctuation('.')); // Output: "True"

Console.WriteLine(Char.IsSeparator(str, 4)); // Output: "True"

Console.WriteLine(Char.IsSymbol('+')); // Output: "True"

Console.WriteLine(Char.IsWhiteSpace(str, 4)); // Output: "True"

Console.WriteLine(Char.Parse("S")); // Output: "S"

Console.WriteLine(Char.ToLower('M')); // Output: "m"

Console.WriteLine('x'.ToString()); // Output: "x"

}

}

5.2字符串

C# 字符串是使用string 关键字声明的、由一个或多个字符构成的一组字符,string 关键字是C# 语言中对应于System.String 类的快捷方式。C# 中的字符串比C 或C++ 中的字符数组更易于使用,而且也较不容易发生编程错误。

字符串用双引号来生命,例如:

string greeting = "Hello, World!";

5.2.1连接字符串

您可以提取子字符串,并连接字符串,如下所示:

string s1 = "orange";

string s2 = "red";

s1 += s2;

System.Console.WriteLine(s1); // outputs "orangered"

s1 = s1.Substring(2, 5);

System.Console.WriteLine(s1); // outputs "anger"

字符串对象不可变,因此一旦创建就不能更改。对字符串进行操作的方法实际会返回新的字符串对象。因此,出于性能方面的考虑,大量连接或其他涉及的字符串操作应通过StringBuilder 类来执行。

5.2.2转义符

转义符,如“\n”(新行符)和“\t”(制表符)可以包括在字符串中。

string hello = "Hello\nWorld!";

等同于:

Hello

World!

如果要包括反斜杠,则必须在前面放置另一个反斜杠。下面的字符串:

string filePath = "\\\\My Documents\\";

完全等同于:

\\My Documents\

@ 符号

@ 符号指定在创建字符串时必须忽略转义符和换行符。

因此下面的两个字符串是相同的:

string p1 = "\\\\My Documents\\My Files\\";

string p2 = @"\\My Documents\My Files\";

5.2.3常用方法

4.2.3.1ToString()

C# 内置数据类型都提供了ToString 方法,用于将值转换为字符串。此方法可以用于将数值转换为字符串,如下所示:

int year = 1999;

string msg = "Eve was born in " + year.ToString();

System.Console.WriteLine(msg); // outputs "Eve was born in 1999"

4.2.3.2访问单个字符

字符串中包含的各个字符可以使用如下的方法进行访问:Substring、Replace、Split 和Trim。

string s3 = "Visual C# Express";

System.Console.WriteLine(s3.Substring(7, 2)); // outputs "C#"

System.Console.WriteLine(s3.Replace("C#", "Basic")); // outputs "Visual Basic Express"

也可以将字符复制到字符数组中,如下所示:

string s4 = "Hello, World";

char[] arr = s4.ToCharArray(0, s4.Length);

foreach (char c in arr)

{

System.Console.Write(c); // outputs "Hello, World"

}

字符串中的单个字符可以通过索引访问,如下所示:

string s5 = "Printing backwards";

for (int i = 0; i < s5.Length; i++)

{

System.Console.Write(s5[s5.Length - i - 1]); // outputs "sdrawkcab gnitnirP"

}

4.2.3.3更改大小写

若要将字符串中的字母更改为大写或小写,请使用ToUpper() 或ToLower(),如下所示:string s6 = "Battle of Hastings, 1066";

System.Console.WriteLine(s6.ToUpper()); // outputs "BATTLE OF HASTINGS 1066"

System.Console.WriteLine(s6.ToLower()); // outputs "battle of hastings 1066"

4.2.3.4比较

比较两个字符串的最简单方法是使用== 和!= 符号,这两个符号执行区分大小写的比较。

string color1 = "red";

string color2 = "green";

string color3 = "red";

if (color1 == color3)

{

System.Console.WriteLine("Equal");

}

if (color1 != color2)

{

System.Console.WriteLine("Not equal");

}

字符串对象还有CompareTo() 方法,用于根据一个字符串是小于(<) 还是大于(>) 另一个字符串来返回一个整数值。比较字符串时使用的是Unicode 值,并且小写的值小于大写的值。

string s7 = "ABC";

string s8 = "abc";

if (https://www.wendangku.net/doc/d18710805.html,pareTo(s8) > 0)

{

System.Console.WriteLine("Greater-than");

}

else

{

System.Console.WriteLine("Less-than");

}

若要在另一个字符串中搜索某一字符串,请使用IndexOf()。如果未找到搜索字符串,IndexOf() 返回-1;否则,返回该字符串第一次出现的位置的从零开始的索引。

string s9 = "Battle of Hastings, 1066";

System.Console.WriteLine(s9.IndexOf("Hastings")); // outputs 10

System.Console.WriteLine(s9.IndexOf("1967")); // outputs -1

4.2.3.5将字符串拆分为子字符串

将字符串拆分为子字符串(例如将一个句子拆分成单个单词)是常见的编程任务。Split() 方法使用分隔符(如空格字符)char 数组,并返回一个子字符串数组。可以通过foreach 访问此数组,如下所示:

char[] delimit = new char[] { ' ' };

string s10 = "The cat sat on the mat.";

foreach (string substr in s10.Split(delimit))

{

System.Console.WriteLine(substr);

}

5.3StringBuilder

StringBuilder 类创建一个字符串缓冲区,用于在程序执行大量字符串操作时提供更好的性能。StringBuilder 类还允许重新分配单个字符,这是内置字符串数据类型所不支持的。

在此示例中,创建一个StringBuilder 对象,并使用Append 方法逐一添加其内容。

class TestStringBuilder

{

static void Main()

{

System.Text.StringBuilder sb = new System.Text.StringBuilder();

// Create a string composed of numbers 0 - 9

for (int i = 0; i < 10; i++)

{

sb.Append(i.ToString());

}

System.Console.WriteLine(sb); // displays 0123456789

// Copy one character of the string (not possible with a System.String)

sb[0] = sb[9];

System.Console.WriteLine(sb); // displays 9123456789 }

}

(实验四)符数组与字符串

实验四字符数组与字符串 一、实验目的 ●了解并掌握一维数组与二维数组的定义方法 ●了解并掌握一维数组与二维数组的初始化方法及元素的引用方法 ●了解并掌握字符串、字符串数组以及字符串函数的使用方法 二、实验环境 ●个人计算机一台,PIII500(或同等性能)以上CPU,128MB以上内存,500MB以 上硬盘剩余空间。 ●Windows2000、Windows XP或Win 7操作系统 ●Code::Blocks(版本12.11或近似版本,英文版) 三、实验内容 1. 冒泡排序 编写程序,实现如下功能:从键盘上输入整数n(n<=100),再输入n个整数,以冒泡排序算法将n个整数按从小到大的顺序进行排序。 /*example-14.c*/ #include "stdio.h" int main() { int num[100], n, i, j, t; /*输入整数的数量n*/ printf("Input n(<=100):"); scanf("%d", &n); /*输入n个整数*/ printf("Input %d numbers:\n", n); for(i=0; i

/*输出排序后的数据*/ printf("After sorting:\n"); for(i=0; i

C语言学习2之字符串及输入输出

C语言学习2之字符串及输入输出 语言学习 字符串及输出和输入 :不像我们之前学到的整型,浮点型等数据那样,没有为字符串定义专门的变量类型,一般情况下将字符串放在字符数组中。下 “ * <> <> " "宏定义一个字符串 ()

{ (" () \"()); (" () \"()); } 程序 程序运行的结果如图所示: 图:程序运行结果 () \” * 函数名: 输入参数:无 输出参数:无 调用:()

被调用:无 功能:求取字符串中字符的个数 * <> <> \"(""))。而()只是一个关键字,它是用来求某一数据类型所占的字节数的;.我们可以通过宏定义的方式来定义一段字符串。其实我们还可以有另一个方法来定义一个字符串变量: [] " ." 下面我们来具体比较下()和的区别,看程序: *

函数名: 输入参数:无 输出参数:无 调用:(), () 被调用:无 程序运行的结果如图所示:

图:程序运行结果 从程序运行的结果我们可以看出()求的是数组的大小,因为我们定义的是包含个字符元素的数组,而一个字符的大小为个字节,所以该数组的大小为;()求的是该数组中字符串所包含的字符的个数(包括空格),所以其大小为. 标志 五种标志的具体具体作用如表所示: 标志意义 项目左对齐。也就是说将项目打印在 字段的左侧开始处。 有符号的数若为正则在数字前加 “”,若为负则加“” 空格有符号数若为正则在数字前加一

个空格,若为负则在数字前加 “” 和会打印出八进制和十六进制的 的前缀。对于浮点型数据,即使 没有数字,也会打印一个小数点 用前导代替空格来填充字段宽 度。如果标志与精度说明符同时 出现那么标志被忽略 表:()种标志 :用反斜杠和回车的方式。例如: (“ \ .\”) .采样字符串连接的方法。例如:

C语言输入输出函数格式详解

1、输入和输出: 输入:输入也叫读,数据由内核流向用户程序输出:输出也称写、打印,数据由用户程序流向内核 以下介绍一些输入输出函数,尽管都是一些有缺陷的函数,但比较适合初学者使用2、p rintf用法(其缺陷在于带缓存) 解释:第一幅图没有加'\n',不会刷新缓存区,则不会打印出来;第二幅图是因为主函数结束时刷新了缓存区,但由于没有换行符,所以没有换行便显示了后面的内容;第三幅图时正常打印。 变量定义的是什么类型,在printf打印时就需要选择什么格式符,否则会造成数据的精度丢失(隐式强转),甚至会出现错误

(1)格式输出函数的一般形式 函数原型:int prin tf(char * format[,argume nt, …]); 函数功能:按规定格式向输出设备(一般为显示器)输出数据,并返回实际输 出的字符数,若出错,贝U返回负数。 A、它使用的一般形式为:printf(" 格式控制字符串",输出项列表); B、语句中"输出项列表"列出要输出的表达式(如常量、变量、运算符表达式、 函数返回值等),它可以是0个、一个或多个,每个输出项之间用逗号(,)分隔; 输出的数据可以是整数、实数、字符和字符串。 C、"格式控制字符串"必须用英文的双引号括起来,它的作用是控制输出项的格 式和输出一些提示信息,例如:

int i=97; printf("i=%d,%c\n",i,i); 输出结果为:i=97,a 语句printf("i=%d,%c\n",i,i); 中的两个输出项都是变量i ,但却以不同的格式输出,一个输出整型数97,另一个输出的却是字符a,其格式分别由"%d" 与"%c"来控制。 语句printf("i=%d,%c\n",i,i); 的格式控制字符串中"i=" 是普通字符, 他将照原样输出;"%d"与"%c"是格式控制符;"\n"是转义字符,它的作用是换行。 (2) 格式控制 格式控制由格式控制字符串实现,格式控制字符串由3部分组成:普通字符、 转义字符、输出项格式说明。 A 、普通字符。普通字符在输出时,按原样输出,主要用于输出提示信息。(空格属于普通字符) B 、转义字符。转义字符指明特定的操作,如"\n" 表示换行,"\t" 表示水平制 \n 换行 \f 清屏并换页 \r 回车 \tTab 符 \xhh 表示一个ASCII 码用16 进表示, 其中hh 是1 到2 个16 进制数C 、格式说明部分由"%"和" 格式字符串"组成,他表示按规定的格式输出数据。 格式说明的形式为:%[flags] [width] [.prec] [F|N|h|l] type||% [标志] [输出最少宽度][.精度][长度]类型 各部分说明如下: a 、[] 表示该项为可选项,即可有可无,如printf("%d",100); b 、%:表示格式说明的起始符号,不可缺少。 c 、flags 为可选择的标志字符,常用的标志字符有: - ——左对齐输出,默认为右对齐输出 + ——正数输出加号(+) ,负数输出减号(-) ,如省略正数的+默认不显示 0 ——输出数值时指定左面不使用的空位置自动填0,如省略表示指 定空位不填 # ——对c、s、d、u 类无影响;对o 类,在输出时加前缀0(数字 0, 八进制表示符);对x类,在输出时加前缀0x(字母为小写);对X类,在输出时加前缀0X(字母为大写);对e,g,f类当结果有小数时才给出小数点。 d 、width 为可选择的宽度指示符。用十进制正整数表示设置输出值得最少字符个数。不足则补空格,多出则按实际输出,默认按实际输出,例如:printf("%8d\n",100); ( 前面空五格)100 printf("%08d\n",100); ( 前面5 个0)100 printf("%6d\n",100); ( 前面空三格)100 printf("%-8d\n",100); 100( 后面空五格) printf("%+8\n",100); ( 前面空四格)+100 e 、[.prec] 为可选的精度指示符用“小数点”加“十进制正整数”表示,对“整 数”、“实数”和“字符

微机原理实验五字符及字符串的输入输出

实验五字符及字符串的输入输出 一、实验目的 1. 学会编写简单的字符、字符串输入输出程序。 2. 掌握几种常用的DOS 系统功能调用。 二、实验环境 1. 硬件:PC 微机 2. 软件:Masm for Windows 汇编集成开发环境 三、实验讲义 1. 系统功能调用是MS-DOS 为程序员编写汇编语言源程序提供的一组子程序,包括设备管理、文件管理和目录管理等。它规定使用软中断指令INT 21H 作为进入各功能子程序的总入口,再为每个功能调用规定一个功能号,引用功能号即可进入相应的子程序入口。 使用方法: (1)传送入口参数到指定的寄存器中,有的子程序不需要入口参数; (2)把要调用功能的功能号送入AH 寄存器中; (3)用INT 21H 指令转入子程序入口; (4)相应的子程序运行结束后,可以按照规定取得出口参数,一般给在寄存器中。 常用系统功能调用的功能号有 1,10(0AH),2,9,4CH 五种: (1)键盘输入单字符——1 号系统功能调用格式: MOV AH,1 INT 21H 功能:系统等待键盘输入,将键入字符的ASCII 码送入AL 寄存器中,并通过显示器显示该字符。 (2)键盘输入字符串——0A 号系统功能调用格式: LEA DX,缓冲区首地址MOV AH,0AH INT 21H 功能:将键盘输入的字符串写入内存单元中。 (3)输出单字符——2 号系统功能调用格式: MOV DL,’单字符’/ASCII 码MOV AH,2 INT 21H 功能:将单个字符通过屏幕显示出来。将要显示的字符或者其ASCII 码先存入寄存器DL 中,再调用2 号系统功能调用。 (4)输出字符串——9 号系统功能调用格式: LEA DX,字符串首地址 MOV AH,09H INT 21H 功能:将指定的内存缓冲区中的字符串从显示器显示输出,注意字符串以字符’$’作为结束标志。 (5)返回操作系统——4CH 号系统功能调用格式:MOV AH,4CH INT 21H 功能:在用户程序结束处插入此调用,则返回到DOS 操作系统,显示器显示系统提示符。 四、实验内容 1. 从键盘输入一个大写字母,屏幕上输出其相应的小写字母。(大写字母 A-Z 的ASCII 为41H-5AH;小写字母a-z 的ASCII 码为61H-7AH)

C语言字符串的输入和输出

C语言字符串的输入和输出 字符串的输入和输出 %c人为加入\0进行输入输出 %s直接输入输出 *输入输出字符串时字符数组应有足够的存储空间,指针变量作为输入项时,指针必须已经指向确切的、足够大的存储空间 %s的使用 scanf("%s",地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 例:char str[15]; scanf("%s",str); abc123 1.不读入空格和回车,从空格处结束 2.输入字符串长度超过字符数组元素个数,不报错 3.当输入项为字符指针时,指针必须已指向确定的有足够空间的连续 存储单元 4.当为数组元素地址时,从此元素地址开始存放 2.printf("%s",地址值) 输出时遇到第一个'\0'为止 3.gets和puts函数 开头必须stdio.h #include"stdio.h"

1.gets(地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 4.当为数组元素地址时,从此元素地址开始存放 5.printf("%s",地址值) 输出时遇到第一个'\0'为止 6.gets和puts函数 开头必须stdio.h #include"stdio.h" 1.gets(地址值) 地址值:字符数组名、字符指针、字符数组元素的地址 7.例: char str[10]; gets(str); 包括空格符 8. 2.puts(字符串起始地址) 遇第一个'\0'结束,自动加入换行符 9.字符串数组:数组中每个元素都是一个存放字符串的数组 可以将一个二维数组看作是字符串数组 10.char ca[3][5]={"A","BB","CCC"}; A\0 B B\0 C C C\0 字符型指针数组 char*pa[3]={"a","bb","ccc"}; pa[0]pa[1]pa[2] 可以重新赋值gets(pa[2]);

关于C语言中的字符串数组输入输出控制符的若干问题

关于C语言中的字符串数组输入输出控制符的若干问题示例一: #include void main() { int i; int a[6]; for(i=0;i<6;i++) { printf("please enter a number:\n" ); scanf("%d",&(a[i])); } printf("%d,%d,%d,%d,%d,%d",a[0],a[1],a[2],a[3],a[4],a[5]); //printf("%d",a); 这是错误做法,没有输出若干个实数的控制符,只能一个个输出。 } 实例二: #include void main() { int i; char a[6]; for(i=0;i<6;i++) { printf("please enter a number:\n" ); scanf("%s",&(a[i])); //只可从键盘输入一个字符,否则输出将每次输入多余的部分丢弃。 //不可写成:scanf("%c",&(a[i])); } printf("%c%c%c%c%c%c",a[0],a[1],a[2],a[3],a[4],a[5]); //不可用%s%s%s%s%s%s //也可以这样写:printf("%s",a); } 示例三: #include void main() { int i; char a[6]; for(i=0;i<6;i++) { printf("please enter a number:\n" ); scanf("%c",&(a[i])); getchar(); //如果用%c作为输入一个字符控制符用,后面必须加此句; } a[6] = '\0'; //如果用%c作为输入一个字符控制符用,后面必须加此句; printf("%s",a); }

字符及字符串输入输出与顺序程序设计实验样本

微机原理第二次实验字符及字符串输入输出与顺序程序设计实验 班级: 姓名: 学号: 日期:

2.2 字符及字符串输入输出与顺序程序设计实验 2.2.1 实验目 1、学习和掌握字符及字符串输入输出办法。 2、掌握顺序程序设计办法。 3、进一步掌握调试工具用法。 2.2.2 实验预习规定 1、复习DOS功能调用中用于字符输入(功能号01H)、字符输出(功能号02H)、字符串输入(功能号 为0AH)以及字符串输出(功能号09H)调用办法(详见教材5.5.6)。 2、复习BCD码运算调节指令。 3、依照“2.2.3 实验内容”中给出源程序框架编写完整源程序,以便实验时调试。 4、从“2.2.4 实验习题”中任选一道题目,编写源程序,以便上机调试。 2.2.3实验内容 从键盘输入两个一位十进制数,计算这两个数之和,并将成果在屏幕上显示出来。 1、问题分析 例如使用功能号为01H用于实现单个字符输入DOS功能调用接受从键盘输入两个十进制数8和6,这时计算机内部得到是这两个数ASCII码值38H和36H。由于数字0 9ASCII码值与其代表数值之间相差30H,因而将其减去30H即可得到以非压缩型BCD数形式表达十进制数08H和06H,使用ADD指令对它们进行相加后成果为0EH(00001110B),显然需要用非压缩型BCD数加法调节指令对ADD运算成果进行调节,调节后得到两个非压缩型BCD数01H和04H,将它们分别加上30H后变为其相应ASCII码31H(1ASCII码)和34H(4ASCII码),然后调用功能号为02H用于单个字符输出DOS功能调用将它们显示出来。综上所述,需要考虑如下问题。 (1)从键盘输入一种一位十进制数办法 通过功能号为1DOS功能调用实现从键盘输入一种字符,格式如下:

关于输入输出函数

1.输入字符串──gets()函数 (1)调用方式:gets(字符数组) (2)函数功能:从标准输入设备(stdin)──键盘上,读取1个字符串(可以包含空格),并将其存储到字符数组中去,并用空字符(\0)代替s的换行符。gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。如果调用成功,则返回字符串参数s;如果遇到文件结束或出错,将返回null。该函数输入的字符串中允许包含空格,而scanf()函数不允许。 2.输出字符串──puts()函数 (1)调用方式:puts(字符数组) (2)函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,并用‘\n’取代字符串的结束标志‘\0’。所以用puts()函数输出字符串时,不要求另加换行符。字符串中允许包含转义字符,输出时产生一个控制操作。该函数一次只能输出一个字符串,而printf()函数也能用来输出字符串,且一次能输出多个。 3.字符串比较──strcmp()函数 (1)调用方式:strcmp(字符串1 ,字符串2)其中“字符串”可以是串常量,也可以是1维字符数组。 (2)函数功能:比较两个字符串的大小。如果:字符串1=字符串2,函数返回值等于0;字符串1字符串2,函数返回值正整数。如果一个字符串是另一个字符串从头开始的子串,则母串为大。不能使用关系运算符“==”来比较两个字符串,只能用strcmp() 函数来处理。 4.基本输入/输出函数包括: 字符的输入/输出函数(getchar、putchar) 字符串输入/输出函数(gets、puts) 格式化输入/输出函数(scanf、printf) 1.字符的输入/输出函数 库函数getchar 函数原型:int getchar(void) 参数说明:无。 功能说明:从标准输入设备上接收一个字符。 返回值:输入成功时返回字符的ASCII编码值,否则返回-1。 库函数putchar 函数原型:int putchar(int ch) 参数说明:ch 被输出的字符的ASCII编值。 功能说明:向标准输出设备上输出一个字符。 返回值:输入成功时返回该字符的ASCII编码值,否则返回-1。 2.字符串输入/输出函数 库函数gets 函数原型:char* gets(char *s)

C语言中的输入输出函数总结

putchar ():把变量中的一个字符常量输出到显示器屏幕上; getchar ();从键盘上输入一个字符常量,此常量就是该函数的值; printf ();把键盘中的各类数据,加以格式控制输出到显示器屏幕上; scanf ();从键盘上输入各类数据,并存放到程序变量中; puts ():把数组变量中的一个字符串常量输出到显示器屏幕上; gets ():从键盘上输入一个字符串常量并放到程序的数组中. sscanf(); 从一个字符串中提取各类数据。 putchar() 输出一个字符 getchar() 输入流中获取一个字符 例如: char c = getchar(); putchar(c); 格式化输入输出scanf()和printf()是最有用的,所以重点讲一下。 printf(): 一般形式: printf("格式控制".输出列表); eg : printf("a=%d,b=%f,c=%c\n",a,b,c); 1;格式控制. 格式控制是用双引号括起来的字符串,也称"转换控制字符串",它包含以下两部分信息. 格式说明:由"%"和格式字符组成,如%d,%f,%c,他的作用是把输出数据转换为指定格式输出,格式的说明总是由"%"字符开始的. 普通字符:需要原样输出的字符,或者是一些有特殊含义的字符,如\n,\t。 2;输出列表 就是需要输出的一些数据,也可以是表达式,如果在函数中需要输出多个变量或表达式,则要用逗号隔开. 一些特殊字符的输出: 单引号,双引号,和反斜杠的输出在前面加转义字符”\” 如:”\’” , “\””, “\\” %的输出用两个连在一起的%%,即printf(“%%”); 常用的格式说明如下: 格式字符 d 以十进制形式输出带符号整数(正数不输出符号) o 以八进制形式输出无符号整数(不输出前缀O) x 以十六进制形式输出无符号整数(不输出前缀OX) u 以十进制形式输出无符号整数 f 以小数形式输出单精度实数 lf 以小数形式输出双精度实数

输入一个整数,将其转换为字符串输出

例9-15 编写函数,输入一个整数,将其转换为字符串输出。例如,输入整数86556,输出字符串"86556"。 首先确定函数头,函数输入一个long型整数,输出一个char型字符数组,因此可以定为void long2string(long lNum,char chWord[])。注意这里的整数可能比较大,不要定为int型。 函数中,可以首先利用循环和%和/运算符,依次取得整数的每个位。思路如下:例如86556,我们可以将其对10取余,得到个位6;将86556除10余8655,继续对10取余,得到十位5;……以此类推,直到该数变为0为止。这样就可以将整数的每个位分离出来。 在上述的循环过程中,将分离出的数字依次保存到字符数组中。但是要注意,字符数组中保存的是字符,是数字的ASCII码,而不是数字本身的值。因为ASCII码表中阿拉伯数字的码值是连续的,因此一个常用的技巧是,字符0加数字值即为该数字的ASCII码值。 上述过程结束后,字符数组里存放了整数的每个位,但是不符合题目的要求,顺序正好相反。这可以用一个循环对数组进行转置:字符串第一个元素和最后一个元素对换;第二个元素和倒数第二个元素对换;……程序循环进行字符串长度/2 次(如果字符串长度为奇数,中间元素正好不用处理)。 数据要求 问题中的常量: 无 问题的输入: long lNum /*输入的long型数据*/ 问题的输出: char chWord[50] /*转换后的字符串*/ 初始算法 1.初始化变量lNum; 2.调用函数得到字符串; 3.程序输出结果后退出。 算法细化 步骤2的细化 2.1 初始化临时变量 2.2 lNum!=0时,循环执行得到各个位的数字 2.2.1 转换数字ASCII码 2.2.2 i变量增1 2.2.3 lNum=lNum/10,本步骤的目的有两个,一是结束循环,二是正确的 得到数字 2.3 字符串最后加标志 2.4 循环进行数组的逆序 2.5 结束 流程图

字符及字符串输入输出与顺序程序设计实验

微机原理第二次试验字符及字符串输入输出与顺序程序设计实验 班级: 姓名: 学号: 日期:

字符及字符串输入输出与顺序程序设计实验 2.2.1 实验目的 1、学习和掌握字符及字符串的输入输出方法。 2、掌握顺序程序的设计方法。 3、进一步掌握调试工具的使用方法。 2.2.2 实验预习要求 1、复习DOS功能调用中用于字符输入(功能号01H)、字符输出(功能号02H)、字符串输入(功能号为 0AH)以及字符串输出(功能号09H)的调用方法(详见教材5.5.6)。 2、复习BCD码运算调整指令。 3、根据“2.2.3 实验内容”中给出的源程序框架编写完整的源程序,以便实验时调试。 4、从“2.2.4 实验习题”中任选一道题目,编写源程序,以便上机调试。 2.2.3实验内容 从键盘输入两个一位十进制数,计算这两个数之和,并将结果在屏幕上显示出来。 1、问题分析 比如使用功能号为01H的用于实现单个字符输入的DOS功能调用接收从键盘输入的两个十进制数8和6,这时计算机内部得到的是这两个数的ASCII码值38H和36H。由于数字0?9的ASCII码值与其代表的数值之间相差30H,因此将其减去30H即可得到以非压缩型BCD数形式表示的十进制数08H和06H,使用ADD指令对它们进行相加后结果为0EH(00001110B),显然需要用非压缩型BCD数加法调整指令对ADD的运算结果进行调整,调整后得到两个非压缩型BCD数01H和04H,将它们分别加上30H后变为其对应的ASCII码31H(1的ASCII码)和34H(4的ASCII码),然后调用功能号为02H用于单个字符输出的DOS功能调用将它们显示出来。综上所述,需要考虑以下问题。 (1)从键盘输入一个一位十进制数的方法 通过功能号为1的DOS功能调用实现从键盘输入一个字符,格式如下: MOV AH, 01H INT 21H ;此时程序等待用户键入,键入字符的ASCII码值存在AL中 SUB AL, 30H ;减去30H后得到键入数字所代表的数值 (2)提示信息字符串的显示 通过功能号为9的DOS功能调用实现字符串显示,注意字符串的最后一个字符必需为’$’。指令格式如下: MOV D X, OFFSET INFOR1 ;INFOR1为在数据段中定义的要显示的字符串 MOV AH, 09H INT 21H (2)非压缩型BCD数加法调整指令的使用 设从键盘输入的数值已存放在寄存器AL, BL中,可用下列程序完成数据相加和调整操作:XOR AH,AH ADD A L, BL AAA ;执行该指令后,AH中为和的十位上的数字,AL中为个位上的数字 请读者考虑,为什么要使用指令“XOR AH,AH”,不用行否? (3)计算结果的显示 执行完AAA指令后,只需分别将AH(十位上的数值)和AL(个位上的数值)加上30H,并依次调

字符及字符串输入输出与顺序程序设计实验 实验报告

字符及字符串输入输出与顺序程序设计实验 实验报告 2.2.1 实验目的 1、学习和掌握字符及字符串的输入输出方法。 2、掌握顺序程序的设计方法。 3、进一步掌握调试工具的使用方法。 2.2.2 实验预习要求 1、复习DOS功能调用中用于字符输入(功能号01H)、字符输出(功能号02H)、字符串 输入(功能号为0AH)以及字符串输出(功能号09H)的调用方法(详见教材5.5.6)。 2、复习BCD码运算调整指令。 3、根据“2.2.3 实验内容”中给出的源程序框架编写完整的源程序,以便实验时调试。 4、从“2.2.4 实验习题”中任选一道题目,编写源程序,以便上机调试。 2.2.3实验内容 从键盘输入两个一位十进制数,计算这两个数之和,并将结果在屏幕上显示出来。1、问题分析 比如使用功能号为01H的用于实现单个字符输入的DOS功能调用接收从键盘输入的两个十进制数8和6,这时计算机内部得到的是这两个数的ASCII码值38H和36H。由于数字0 9的ASCII码值与其代表的数值之间相差30H,因此将其减去30H即可得到以非压缩型BCD数形式表示的十进制数08H和06H,使用ADD指令对它们进行相加后结果为0EH(00001110B),显然需要用非压缩型BCD数加法调整指令对ADD的运算结果进行调整,调整后得到两个非压缩型BCD数01H和04H,将它们分别加上30H后变为其对应的ASCII码31H(1的ASCII码)和34H(4的ASCII码),然后调用功能号为02H用于单个字符输出的DOS功能调用将它们显示出来。综上所述,需要考虑以下问题。 (1)从键盘输入一个一位十进制数的方法 通过功能号为1的DOS功能调用实现从键盘输入一个字符,格式如下:MOV AH, 01H INT 21H ;此时程序等待用户键入,键入字符的ASCII码值存在AL中 SUB AL, 30H ;减去30H后得到键入数字所代表的数值 (2)提示信息字符串的显示 通过功能号为9的DOS功能调用实现字符串显示,注意字符串的最后一个字符必需为’$’。指令格式如下: MOV DX, OFFSET INFOR1 ;INFOR1为在数据段中定义的要显示的字符串

C语言输入输出函数

1.1 标准输入输出函数 1.1.1 格式化输入输出函数 Turbo C2.0 标准库提供了两个控制台格式化输入、输出函数printf( ) 和scanf(), 这两个函数可以在标准输入输出设备上以各种不同的格式读写数据。printf()函数用来向标准输出设备(屏幕)写数据; scanf() 函数用来从标准输入 设备(键盘)上读数据。下面详细介绍这两个函数的用法。 一、printf()函数 printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出 信息。在编写程序时经常会用到此函数。printf()函数的调用格式为: printf("<格式化字符串>", <参量表>); 其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原 样输出; 另一部分是格式化规定字符, 以"%"开始, 后跟一个或几个规定字符, 用来确定输出内容格式。 参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出参数个数一样多, 各参数之间用","分开, 且顺序一一对应, 否则将会出现意想不到的错误。 1. 格式化规定符 Turbo C2.0提供的格式化规定符如下: ━━━━━━━━━━━━━━━━━━━━━━━━━━ 符号作用 ────────────────────────── %d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %x, %X 无符号以十六进制表示的整数 %0 无符号以八进制表示的整数 %g 自动选择合适的表示法 ━━━━━━━━━━━━━━━━━━━━━━━━━━ 说明: (1). 可以在"%"和字母之间插进数字表示最大场宽。 例如: %3d 表示输出3位整型数, 不够3位右对齐。 %9.2f 表示输出场宽为9的浮点数, 其中小数位为2, 整数位为6, 小数点占一位, 不够9位右对齐。 %8s 表示输出8个字符的字符串, 不够8个字符右对齐。 如果字符串的长度、或整型数位数超过说明的场宽, 将按其实际长度输出。但对浮点数, 若整数部分位数超过了说明的整数位宽度, 将按实际整数位输出; 若小数部分位数超过了说明的小数位宽度, 则按说明的宽度以四舍五入输出。 另外, 若想在输出值前加一些0, 就应在场宽项前加个0。 例如: %04d 表示在输出一个小于4位的数值时, 将在前面补0使其总宽度

字符串的输入与输出

C语言中,没有字符串类型,用字符数组处理字符串。 字符数组定义: char 数组名[常量表达式] [,[常量表达式]]; 说明:一维字符数组,用于存储和处理一个字符串,二维字符数组,用于同时存储和处理多个字符串; 因为字符型与整型是通用的,可以用int来定义字符数组,但两者有区别,如:char c[10]; /* 在内存中占10字节*/ int c[10]; /* 在内存中占40字节*/ 输入输出方法:逐个字符输入输出:%c,整个字符串输入输出:%s 一:用scanf()输入字符串,printf()输出字符串: 逐个字符处理: #include "stdio.h " void main() { char ch[5]; int i; for(i=0;i<5;i++) scanf(“%c”, &ch[i]); for(i=0;i<5;i++) printf(“%c”, ch[i]); } 整个字符串处理: #include "stdio.h " void main() { char ch[5]; scanf(“%s”,ch); printf(“%s”, ch); } 说明: 以字符串为单位处理时,直接使用数组名,无需&; 输入字符串时,字符个数要小于数组的长度,如输入5个字符,定义的字符数组至少应有6个元素; 输入字符串时,若遇空格或回车,输入结束,并自动在串后加上结束标志?\0?;输出字符串时,遇到字符串结束标志?\0?,输出结束。 二:用字符串处理函数输入和输出 字符串标准函数的原型在头文件string.h中(使用字符串处理函数输入和输出时要在头文件上加入#include) 字符串输出函数puts 格式:puts(字符数组) 功能:向显示器输出字符串(输出完,自动换行,即用?\n?替换了?\0?) 说明:字符数组必须以…\0?结束 字符串输入函数gets

字符及字符串输入输出与顺序程序设计实验

字符及字符串输入输出与顺序程序设计实验 从键盘输入两个一位十进制数,计算这两个数之和,并将结果在屏幕上显示出来。1、问题分析 比如使用功能号为01H的用于实现单个字符输入的DOS功能调用接收从键盘输入的两个十进制数8和6,这时计算机内部得到的是这两个数的ASCII 码值38H和36H。 由于数字0 9的ASCII码值与其代表的数值之间相差30H,因此将其减去30H即可得到以非压缩型BCD数形式表示的十进制数08H和06H,使用ADD指令对它们进行相加后结果为0EH(00001110B),显然需要用非压缩型BCD数加法调整指令对ADD的运算结果进行调整,调整后得到两个非压缩型BCD数01H和04H,将它们分别加上30H后变为其对应的ASCII码31H(1的ASCII码)和34H(4的ASCII码),然后调用功能号为02H用于单个字符输出的DOS功能调用将它们显示出来。 综上所述,需要考虑以下问题。 (1)从键盘输入一个一位十进制数的方法 通过功能号为1的DOS功能调用实现从键盘输入一个字符,格式如下:MOV AH, 01H INT 21H ;此时程序等待用户键入,键入字符的ASCII码值存在AL中 SUB AL, 30H ;减去30H后得到键入数字所代表的数值 (2)提示信息字符串的显示 通过功能号为9的DOS功能调用实现字符串显示,注意字符串的最后一个字符必需为’$’。指令格式如下: MOV DX, OFFSET INFOR1 ;INFOR1为在数据段中定义的要显示的字符串 MOV AH, 09H INT 21H (3)非压缩型BCD数加法调整指令的使用 设从键盘输入的数值已存放在寄存器AL, BL中,可用下列程序完成数据相加和调整操作: XOR AH,AH ADD AL, BL AAA ;执行该指令后,AH中为和的十位上的数字,AL中为个位上的数字

字符及字符串的输入输出

实验四字符及字符串的输入输出1 实验目的 掌握简单的DOS系统功能调用 掌握在PC机上建立,汇编,连接,调试程序 2 实验内容 内容一:字符的输入和输出 从键盘读入一个小写字母,输出字母表中倒数与该字母序号相同的那个字母。 程序段: CSEG SEGMENT ASSUME CS:CSEG START:MOV AH,1 INT 21H MOV BL,7AH MOV CL,61H SUB BL,AL ADD BL,CL MOV AL,BL MOV DL,AL MOV AH,2 INT 21H KEY:MOV AH,1 INT 16H JZ KEY MOV AH,4CH INT 21H CSEG ENDS END START 实验结果截图如下: 实验习题: 程序段: DSEG SEGMENT STRING1 DB 'Please input a lowercase letter:',0DH,0AH,'$' STRING2 DB 'The inverse letter is:',0DH,0AH,'$' DSEG ENDS ; CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG MOV DS,AX

LEA DX,STRING1 MOV AH,09H INT 21H MOV AH,1 INT 21H MOV BL,7AH MOV CL,61H SUB BL,AL ADD BL,CL LEA DX,STRING2 MOV AH,09H INT 21H MOV DL,BL MOV AH,2 INT 21H KEY:MOV AH,1 INT 16H JZ KEY MOV AH,4CH INT 21H CSEG ENDS END START 实验截图如下: 内容二:字符串的输入和输出 从键盘输入一个字符串,将输入的字符串传说给STR变量,在屏幕上显示STR变量中的内容。程序段: DSEG SEGMENT KBUF DB 0DH,0AH STR DB 20 DUP(20H),'$' DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX LEA DX,KBUF MOV AH,0AH INT 21H MOV CX,20 ADD DX,2

第4章 串与数组 习题参考答案

习题四参考答案 一、选择题 1.下面关于串的叙述中,哪一个是不正确的?(B ) A.串是字符的有限序列 B.空串是由空格构成的串 C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储 2.串的长度是指( A ) A. 串中包含的字符个数 B. 串中包含的不同字符个数 C. 串中除空格以外的字符个数 D. 串中包含的不同字母个数 3.设有两个串p和q,其中q是p的子串,求q在p中首次出现的位置的算法称为( C )A.求子串B.联接C.模式匹配D.求串长 4.设主串的长度为n,模式串的长度为m,则串匹配的KMP算法时间复杂度是( C )。 A. O(m) B. O(n) C. O(n + m) D. O(n×m) 5. 串也是一种线性表,只不过( A )。 A. 数据元素均为字符 B. 数据元素是子串 C. 数据元素数据类型不受限制 D. 表长受到限制 6.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主进行存储,a11为第一元素, 其存储地址为1,每个元素占一个地址空间,则a85的地址为( B )。 A. 13 B. 33 C. 18 D. 40 7. 有一个二维数组A[1..6, 0..7] ,每个数组元素用相邻的6个字节存储,存储器按字节编址, 那么这个数组占用的存储空间大小是(D )个字节。 A. 48 B. 96 C. 252 D. 288 8.设有数组A[1..8,1..10],数组的每个元素占3字节,数组从内存首地址BA开始以列序 为主序顺序存放,则数组元素 A[5,8]的存储首地址为( B )。 A. BA+141 B. BA+180 C. BA+222 D. BA+225 9. 稀疏矩阵的三元组存储表示方法( B ) A. 实现转置操作很简单,只需将每个三元组中行下标和列下标交换即可 B. 矩阵的非零元素个数和位置在操作过程中变化不大时较有效 C. 是一种链式存储方法 D. 比十字链表更高效 10. 用十字链表表示一个稀疏矩阵,每个非零元素一般用一个含有( A )域的结点表示。 A.5 B.4 C. 3 D. 2 二、填空题 1. 一个串的任意连续字符组成的子序列称为串的子串,该串称为主串。2.串长度为0的串称为空串,只包含空格的串称为空格串。 3. 若两个串的长度相等且对应位置上的字符也相等,则称两个串相等。 4. 寻找子串在主串中的位置,称为模式匹配。其中,子串又称为模式串。 5. 模式串t="ababaab"的next[]数组值为-1001231,nextval[]数组值为-10-10-130。 6. 设数组A[1..5,1..6]的基地址为1000,每个元素占5个存储单元,若以行序为主序顺序 存储,则元素A[5,5]的存储地址为1140。

第四章 数组习题集答案

第四章数组习题 一、选择题 1. 如果char型变量占两个字节的存储单元,则按照如下方式定义的数组x占用的字节数 是【】。 char x[50]={2,4,6,8,10}; A)50 B)100 C)10 D) 5 2. 下面关于数组的定义正确的是【】。 A) int n=10; float a[n]={1.0,2.1,3.2}; B) #define N 10 int a[N]={1,2,3}; C) int n; scanf("%d", &n); int a[n]; D) #define N 10; int a[N]={1,2,3}; 3. 若有说明int a[5][4]; 则对其数组元素的正确引用是【】。 A)a[3+1][2] B)a(2)(3) C)a[0,2]D)a[3][5] 4. 若定义了数组int k[][4]={{1},{1,2,3},{5,6}};则数组共有【】元素。 A)6 B)9 C)10 D)12 5. 要将20,30,40,50 存入数组b中, 下列正确的程序段是【】。 A) int i,b[4]; for(i=0; i<4; i++) b[i]=(i+2)*10; B) int b[4]; b={20,30,40,50}; C) int b[4]; b[1]=20,b[2]=30,b[3]=40,b[4]=50; D) int b[4]; b[4]={20,30,40,50}; 6. 下列二维数组初始化语句中正确且与语句float a[]={0,1,2,0,4,0}等价的是【】。 A)float a[6]={0,1,2,0,4}; B)float a[]={0,1,2,0,4}; C)float a[7]={0,1,2,0,4,0}; D)float a[5]={0,1,2,0,4}; 7. printf("%d \n ", strlen ("ATS\n012\1\\" )) ; 程序段的输出结果是【】。

微机实验四 字符及字符串的输入和输出

实验四字符及字符串的输入和输出 一、实验目的 1.熟悉如何进行字符及字符串的输入输出。 2.掌握简单的DOS系统功能调用。 二、实验预习要求 1.复习系统功能调用的1、2、9、10号功能。 2.按照题目要求预先编写好实验中的程序段。 三、实验任务 1.输入以下程序段并用F8键单步运行,执行INT 21H指令时,在键盘上按“5”键。 MOV AH,1 INT 21H (1)运行结束后,(AL)=35H它是5的ASCII码 (2)重复运行以上程序段,并分别用“A”、“B”、“C”、“D”键代替“5”键,观察运行结果 有何变化? (3)A:41H B:42H C:43H D:44H 2.在DS:1000H开始的内存区域设置如下键盘缓冲区: DS:1000H 5,0,0,0,0,0,0 然后输入以下程序段并用F8键单步运行,执行INT 21H指令时,在键盘上键入“5”、“4”、“3”、“2”、“1”、〈回车〉这六个键。 LEA DX,[1000H] MOV AH,0AH INT 21H 程序段运行完后,检查DS:1000H开始的内存区域:

(1)DS:1001H单元的内容是什么?它表示了什么含义? 04表示可以输入四个字符串 (2) 从DS:1002H开始的内存区域中的内容是35H 34H 33H 32H?其中没有字符“1”的ASCII 码?为什么? 没有 因为只允许输入四个字符串 3.输入以下程序段并运行之。 MOV DL,‘A’ MOV AH,2 INT 21H i.观察屏幕上的输出,是否显示了“A”字符? 没有,显示为41h ii.分别用“#”、“X”、“Y”、“$”、“?”代替程序段中的“A”字符,观察屏幕上的输出有何变化。 #:# X:X Y:Y $:$ ?? iii.分别用0DH、0AH代替程序段中的“A”字符,观察屏幕上的输出有何变化。 屏幕依次出现CR,LF, iv.用07H代替程序段中的“A”字符,观察屏幕上有无输出?计算机内的扬声器是否发出“哔”的声音? 无输出,发出“哔” 的声音 4.要在屏幕上显示一个字符串“Hello, world”,写出该字符串变量的定义语句和显示这个字符串的程序段。上机验证之。 DSEG SEGMENT STRING DB 'Hello,world!',0DH,0AH,'$' DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG MOV DS,AX

相关文档
相关文档 最新文档