习题解答
1.请将算法4-1改为用while循环来实现。 答:改写的算法4-1可以是如下所示。
Concat_St(St1, St2) {
char St3[maxsize]; St3_len=0;
if (St1_len+St2_len>maxsize+1) {
printf(“两串长度之和超长!”); return(NULL); } else { i=1;
while (i<=St1_len) {
St3[i]=St1[i]; i++;
} j=1;
while (j<= St2_len) {
St3[j+St1_len]=St2[j]; j++;
}
St3_Len=St1_len+St2_len; St3[St3_len+1]= “\\0”; return(St3); } }
/* 新串放不下两个串 */
/* 创建一个新的顺序串为空 */
2.算法4-2也可以这样来描述,直接核对相应位置上的字符是否相同,然后再分别情况做出判断:一是有不相同的字符出现,一是有一个字符串比另一个字符串长,最后则是两个串完全相等。按照这样的设计,改写算法4-2。 答:按照这样的设计,算法4-2的描述如下。
Equal_St(St1, St2) { i=1;
while (St1[i] != “\\0”) {
if (St1[i] == St2[i]) /* 相等,继续比较 */ i++; else black; }
/* 不等,强制退出 */
/* 两串进行比较 */
- 17 -
习题解答
if (St1[i] != St2[i]) return (0); else {
if (St1[i] != “\\0” || St2[i] != “\\0”) /* 比较是由于长度不同而结束 */ }
return (0); else return (1);
/* 比较是由于相应位置上的字符不同而结束 */
}
3.算法:
Trans_St(St,ch1,ch2) { i=1;
While(St[i]!=\ {
if(St[i]==ch1) St[i]==ch2; i++; } }
是通过while循环来实现将顺序串St中所有的字符ch1改为字符ch2的。请改写成用for循环来实现相同的功能。 答:用for 循环改写的算法如下。
Trans_St(St, ch1, ch2) {
for (i=1; i<=St_len; i++) if (St[i] == ch1) St[i] = ch2; }
4.编写一个算法,将顺序串St中所有的大写字母全部换成小写字母。(提示:大写英文字母A~Z对应的ASCII码为65~90,小写英文字母a~z对应的ASCII码为97~122,在大写字母的ASCII码上加32,就是对应小写字母的ASCII码) 答:算法编写如下。
Catosm_St(St) {
for (i=1; i<=St_len; i++) if ((A<=St[i])&&(St[i]<=Z)) St[i]=St[i]+32