Download presentation
Presentation is loading. Please wait.
1
第四章 串 String 2007.9
2
一、串和基本概念 串(String)是零个或多个字符组成的有限序 列。 一般记作S=“a1a2a3…an”
空串:长度为零的串,它不包含任何字符。
3
串的基本操作 对于串的基本操作,许多高级语言均提供了相应的运算或标准 库函数来实现。下面仅介绍几种在C语言中常用的串运算,其它 的串操作见的文件。 1.求串长(strlen) 2.串复制(strcpy) char *strcpy(char to,char from); 该函数将串from复制到串to中,并且返回一个指向串to的开始处 的指针。 3.联接(strcat) char strcat(char to,char from) 该函数将串from复制到串to的末尾,并且返回一个指向串to的开 始处的指针。 4.串比较(strcmp) int strcmp(chars1,char s2); 该函数比较串s1和串s2的大小,当返回值小于0,等于0或大于0时 分别表示s1<s2\s1=s2或s1>s2
4
串的存储结构 typedef struct node{ char data; struct node *next; }lstring;
1.顺序串 顺序串上的插入和删除操作不方便,需要移动大量的字符。 2.链串 可用单链表方式来存储串值 typedef struct node{ char data; struct node *next; }lstring; 一个链串由头指针唯一确定。 这种结构便于进行插入和删除运算,但存储空间利用率太低。
5
2002试题二 [函数2.1说明] 函数strcat(char*si,char*s2)是将字符串s2连接在字符串 ,s1之后,构成一个首指针为s1的字符串。 [函数2.1) void strcat(char *sl,char *s2) { while(*s1!='\0') ; (1) : for( ; (2) ;s1++,s2++); }
6
1999试题一 <函数1.1说明> 函数strcpy(char *to,char *from)将字符串from复制到字 符串to. void strcpy(char *to, char *from) {while (____(1)____);}
7
2001 试题一 [函数1.1说明] 函数strcmp()是比较两个字符串 s 和 t 的大小。若 s < t 函数返回负数;若 s = t 函数返回0;若 s > t,函数返回 正数。 int strcmp(char *s,char *t) { while ( *s && *t && __(1)__){ s++; t++ ; } return __(2)__; }
8
2003[函数2.1说明] 函数char *strrchr(char*s,char ch)的功能是在字符串s中 寻找字符ch若ch出现在字符串s中,则返回最后一次出 现时的位置,否则返回NULL。 [函数2.1] char *strrchr(char *s,char ch) { char*p; p = __(1)__; /*p指向字符串s的结束标志*/ while( --p >= s) if(__(2)__) return p; return NULL; }
9
2005-1[函数2.2说明] 函数long fun2(char*str)的功能是:自左至右顺序取出非空字符串str中的数字 字符形成一个十进制整数(最多8位)。 例如,若字符串str的值为“f3g8d5.ji2e3p12fkp”,则函数返回值为 。 [函数2.2] long fun2(char *str) { int i=0; long k=0; char *p=str ; while (*p != ‘/0’&& __(3)__ ) { if(*p ?=‘0’&& *p ?=‘9’){ k=___(4)___+*p-‘0’; ++i; } ___(5)___; } Return k; }
10
2004-1[函数2.1说明] 函数palindrome(chars[])的功能是:判断字符串s是否为回文字符 串,若是,则返回0,否则返回-1。若一个字符串顺读和倒读 都一样时,称该字符串是回文字符串,例如:“LEVEL”是回 文字符串,而“LEVAL”不是。 [函数2.1] int palindrome(char S[]) { char *pi,*pj; pi=S;pj=s+strlen(S)-1: while ( pi<pj && __(1)__){ pi++; pj--; } if(__ (2)__)return-1; else return 0; }
11
2004-1[函数2.2说明] 函数f(char *str,char del)的功能是;将非空字符串str分割成若干个子字符串并 输出,del表示分割时的标志字符。例如若str的值为“ ”,del的值为 ‘3’,调用此函数后,将输出三个子字符串,分别为“12”、“4”和“5”。 [函数2.2] void f(char*str,char del) { int i,j,len; len = strlen(str); i = 0; while (i<len){ while (__(3)__) i++; /*忽略连续的标志字符*/ /*寻找从str[i]开始直到标志字符出现的一个子字符串*/ j = i + 1; while (str[i] !=del && str[j] !=‘\0’) j++; __ (4)__=“\0”;/*给找到的字符序列置字符串结束标志*/ printf(“ %s\t”,&str[i]): ’ __ (5)__;} }
12
2005-2 字符串"computer" 中长度为3的子串有__(32)_ 个。
(32)A.4 B.5 C.6 D.7 字符串是一种线性表,其特殊性表现在_(37)_ (37)A.它的数据元素是一个字符 B.它可以链式存储 C.它可以顺序存储 D.它的数据元素可以是多个字符 以下关于字符串的判定语句中正确的是__(7)__。 (7)A.字符串是一种特殊的线性表 B.串的长度必须大于零 C.字符串不属于线性表的一种 D.空格字符组成的串就是空串
13
答案 2004-1 (1)*pi == *pi (2)pi<pj 或 *pi != *pj (3)str[i] == del (4)str[j] (5) i = j+1
Similar presentations