题目:
利用指针编写程序
编写具有如下原型的函数:
void chgStr(char *ip,char *op)
负责将ip所指向输入字符串中的各字符按照指定规则进行变换后,存放到由op指向的输出串中。即从头到尾逐字符地对ip所指向的字符串进行如下处理:
(1)若ip所指当前字符为字母,则将其改变大小写后存放到结果字符串op中。
(2)若ip所指当前字符是一个数字字符,则将其变换为另一个数字字符后存放到结果字符串op中:字符0变换为字符9,字符1变换为字符8,字符2变换为字符7,依此类推,字符9变换为0。
(3)若ip所指当前字符为其它字符,则将该字符复制到结果字符串op中。
例如:若调用时通过ip带来的字符串为“Nankai 1918-2004,x+y-5*6/37=?OK!”,则结果字符串op应为“nANKAI8081-7995,X+Y-4*3/62=?ok!”。
最后编写主函数,对chgStr()进行调用,以验证其正确性。
思路:
-
chgStr
函数:- 接受两个字符指针
ip
和op
作为输入,其中ip
是输入字符串,op
是输出字符串。 - 通过一个循环遍历输入字符串
ip
中的每个字符。 - 对于每个字符,根据一定的条件进行转换:
- 如果是大写字母(ASCII码范围在65到90之间),则转换为对应的小写字母(加32)。
- 如果是小写字母(ASCII码范围在97到122之间),则转换为对应的大写字母(减32)。
- 如果是数字(ASCII码范围在48到57之间),则转换为相对于9的差值(例如,3变成6,8变成1)。
- 对于其他字符,保持不变。
- 将转换后的字符存储到输出字符串
op
中。 - 在循环结束后,添加字符串终止符
'\0'
到输出字符串op
的末尾,以确保它是一个有效的C字符串。
- 接受两个字符指针
-
main
函数:- 定义两个字符数组
ip
和op
,并通过scanf
函数获取用户输入的字符串。 - 调用
chgStr
函数进行字符串转换。 - 使用
printf
函数输出转换后的字符串。
- 定义两个字符数组
-
潜在问题:
- 在
printf
函数中,格式控制符应该是%s
而不是%S
。 - 用户输入的字符串可能超过数组大小,存在缓冲区溢出的潜在风险。
- 在
代码:
void chgStr(char* ip, char* op)
{
int i;
for (i = 0; *(ip + i)!= '\0'; ++i)
{
if (*(ip + i) >= 65 && *(ip + i) < 65 + 26)
{
*(op + i) = *(ip + i) + 32;
}
else if (*(ip + i) >= 97 && *(ip + i) <= 97 + 26)
{
*(op + i) = *(ip + i) - 32;
}
else if (*(ip + i) >= 48 && *(ip + i) <= 57)
{
*(op + i) = 48 + 57 - *(ip + i);
}
else
{
*(op + i) = *(ip + i);
}
}
op[i] = '\0';
}
int main()
{
char ip[30], op[30];
scanf("%s", ip);
chgStr(ip, op);
printf("%S", op);
}
运行结果: