• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
qyk123
博客园    首页    新随笔    联系   管理    订阅  订阅
C语言实验报告十一——指针

题目:

利用指针编写程序

编写具有如下原型的函数:

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()进行调用,以验证其正确性。

思路:

  1. 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字符串。
  2. main 函数:

    • 定义两个字符数组 ip 和 op,并通过 scanf 函数获取用户输入的字符串。
    • 调用 chgStr 函数进行字符串转换。
    • 使用 printf 函数输出转换后的字符串。
  3. 潜在问题:

    • 在 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);
}

运行结果:

posted on 2024-02-23 19:21  qiyukun  阅读(38)  评论(0)    收藏  举报  来源
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3