• 沒有找到結果。

2 指针与字符串

在文檔中 第 8 章 指针 (頁 36-39)

一 、 调 试 示 例

找最小的字符串:输入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;

}

在文檔中 第 8 章 指针 (頁 36-39)

相關文件