C语言编程:字符串连接与转换

需积分: 1 0 下载量 111 浏览量 更新于2024-07-26 收藏 285KB DOC 举报
“C语言历年上机试题,包括填空题和改错题,涉及字符串操作和指针的使用。” 在C语言中,字符串是字符数组,通常以'\0'(空字符)作为结束标志。本题主要考察的是对字符串进行操作,特别是如何连接两个字符串以及如何将字符串中的小写字母转换为大写字母。 1. 填空题 题目要求编写一个函数`fun()`,将输入的字符串`str2`接在字符串`str1`后面。在提供的代码中,有三个填空需要完成: - **填空1**:`while(【1】)`,此处应填入判断字符串`str1`是否结束的条件。由于`i`变量用于记录`str1`的长度,所以填入`*(p1+i) != '\0'`,表示在遇到`str1`的结束标志符前继续执行循环。 - **填空2**:`for(;【2】; i++)`,这里应填入`for`循环的终止条件,即在`str2`未达到结束标志符时继续执行。因此填入`*p2 != '\0'`。 - **填空3**:`*(p1+i)=【3】;`,这一步是将`str2`的字符赋值给`str1`,所以填入`*p2++`,这样既能获取当前字符并将其赋值给`str1`,又能使`p2`指向下个字符。 完整的`fun`函数如下: ```c void fun(char* str1, char* str2) { int i = 0; char* p1 = str1; char* p2 = str2; while (*(p1 + i) != '\0') i++; for (; *p2 != '\0'; i++) *(p1 + i) = *p2++; *(p1 + i) = '\0'; } ``` 2. 改错题 题目要求修改`fun()`函数,使其能将字符串`tt`中的小写字母转为大写。在给定的程序中,可能存在的错误在于没有直接提供`fun`函数的代码。在C语言中,可以使用`toupper()`函数将小写字母转换为大写字母。假设原代码如下: ```c void fun(char* tt) { while (*tt) { if (*tt >= 'a' && *tt <= 'z') *tt -= 32; // 错误:应使用toupper()函数 tt++; } } main() { char tt[81]; gets(tt); fun(tt); printf("%s\n", tt); } ``` 改正后的代码应使用`toupper()`函数替换错误的部分: ```c #include <ctype.h> void fun(char* tt) { while (*tt) { if (*tt >= 'a' && *tt <= 'z') *tt = toupper(*tt); // 使用toupper()转换为大写字母 tt++; } } ``` 这个改正后的`fun`函数将正确地将`tt`中的小写字母转换成大写字母。在`main()`函数中,可以通过`gets()`函数获取用户输入的字符串,然后调用`fun()`函数进行处理,最后输出转换后的字符串。注意,`gets()`函数已弃用,应使用`fgets()`替代以避免缓冲区溢出问题。