一 、 调 试 示 例
找最小的字符串:输入5 个字符串,输出其中最小的字符串。(源程序 error08_3.cpp)
错误行号: 10 正确语句: strcpy(min,str);
错误行号: 13 正确语句: if(strcmp(min, str) > 0)
错误行号: 14 正确语句: strcpy(min,str);
二 、 基 础 编 程 题
(1)找最长字符串:输入 5 个字符串,输出其中最长的字符串。输入字符串调用函数 scanf("%s", sx);试编写相应程序。
解答:
#include <stdio.h>
#include <string.h>
int main(void) {
char sx[80], longest[80];
int i;
scanf("%s", sx);
strcpy(longest, sx);
for(i = 1; i < 5; i++){
scanf("%s", sx);
if(strlen(longest) < strlen(sx)) strcpy(longest, sx);
}
printf("The longest is: %s\n", longest);
return 0;
}
(2)删除字符:输入一个字符串 s,再输入一个字符 c,将字符串 s 中出现的所有字符 c 删 除。要求定义并调用函数delchar(s,c), 它的功能是将字符串 s 中出现的所有 c 字符删除。试 编写相应程序。
解答:参见习题程序设计第6 题。
(3)使用函数实现字符串复制:输入一个字符串 t 和一个正整数 m,将字符串 t 中从第 m
个字符开始的全部字符复制到字符串s 中,再输出字符串 s。要求用字符指针定义并调用函
数strmcpy(s,t,m), 它的功能是将字符串 t 中从第 m 个字符开始的全部字符复制到字符串 s 中。
试编写相应程序。
解答:参见习题程序设计第5 题。
(4)判断回文字符串:判断输入的一串字符是否为“回文”。所谓“回文”,是指顺读和倒
读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。试编写相应程序。
解答:参见习题程序设计第8 题。
(5)分类统计字符个数:输入一行字符,统计其中的大写字母、小写字母、空格、数字以
及其他字符的个数。试编写相应程序。
解答:参见习题程序设计第9 题。
三 、 改 错 题
连接字符串:函数strc 的作用是将字串 s 连接到字串 t 的尾部。编写一个程序,在主函 数中输入两个字符串s 和 t,调用函数 strc 完成字符串的连接。(源程序 error08_4.cpp)
错误行号: 2 正确语句: void strc(char *s, char *t);
错误行号: 14 正确语句: void strc(char *s, char *t);
错误行号: 19 正确语句: s++, t++;
四 、 拓 展 编 程 题
(1)字符串排序:输入 5 个字符串,按由小到大的顺序输出。试编写相应程序。
解答:
#include <stdio.h>
#include <string.h>
int main(void) {
int i, j, index;
char sx[5][80], stemp[80];
for(i=0;i<5;i++) scanf("%s", sx[i]);
for(i=1; i<4; i++){
index=i;
for(j=i+1;j<5;j++)
if (strcmp(sx[j],sx[index])<0) index=j;
strcpy(stemp,sx[i]);
strcpy(sx[i],sx[index]);
strcpy(sx[index],stemp);
}
printf("After sorted:\n");
for (i=0;i<5;i++) puts(sx[i]);
return 0;
}
(2)长整数转化成 16 进制字符串:设计一个函数 void f(long int x, char *p),其中 x 是待转
化的十进制长整数,p 指向某个字符数组的首元素。函数的功能是把转换所得的 16 进制字 符串写入p 所指向的数组。设计函数 main(),输入一个长整数,调用 f(),输出 16 进制结果。
试编写相应程序。
解答:
#include <stdio.h>
void f(long int x, char *p) { int i = 0, j;
unsigned long int y;
if (x == 0) { p[0] = '0';
p[1] = '\0';
return;
}
if (x < 0) { *(p++) = '-';
y = -x;
} else { y = x;
}
while (y) { int t = y % 16;
p[i++] = t < 10 ? '0' + t : 'A' + t - 10;
y /= 16;
}
p[i] = '\0';
for (j = 0, i = i - 1; j < i; j++, i--) { char t = p[j]; p[j] = p[i]; p[i] = t;
} }
int main() { long int x;
char s[100] = "";
scanf("%ld", &x);
f(x, s);
puts(s);
return 0;
}
(3)IP 地址转换:一个 IP 地址是用四个字节(每个字节 8 个位)的二进制码组成。输入
32 位二进制字符串,输出十进制格式的 IP 地址。所输出的十进制 IP 地址由 4 个十进制数组
成(分别对应4 个 8 位的二进制数),中间用圆点分隔开。试编写相应程序。
解答:
#include <stdio.h>
int main() {
int i, j, x;
for (i = 0; i < 4; i++) { x = 0;
for (j = 0; j < 8; j++) {
x = (x << 1) | (getchar() - '0');
}
if (i) printf(".");
printf("%d", x);
}
printf("\n");
return 0;
}