当前位置: 首页 > article >正文

C语言编程题思路汇总(字符串,数组相关)

交换两个变量的值(不用第三个变量)

//假设a = 2, b = 3。现在要交互a和b的值
int a = 2;
int b = 3;
a = a + b;
b = a - b;//b = a + b - b ,所以b = a 
a = a - b;//a = a + b - a ,所以a = b

 


双指针

反转字符串

大致思路:双指针+首尾两个数据依次进行交换。

p1指针指向尾部。p2指针指向首部。*p1 和 *p2两两交换后,p1指针-1,p2指针+1,因为前后同时开始,所以只需len/2次即可。

代码:

#include <string.h>
char* solve(char* str ) {
    // write code here
    int i, len;  // 声明两个整型变量,用于循环计数和存储字符串长度
    char *p1 = NULL;  // 声明指针 p1,初始化为 NULL
    char *p2 = NULL;  // 声明指针 p2,初始化为 NULL
    len = strlen(str);  // 获取字符串的长度
    p1 = &str[len-1];  // p1 指向字符串的最后一个字符
    p2 = str;  // p2 指向字符串的第一个字符
    
    for(i = 0; i < len / 2; i++)  // 遍历字符串的一半长度
    {
        *p1 = *p1 + *p2;  // 交换 p1 和 p2 指向的字符
        *p2 = *p1 - *p2;
        *p1 = *p1 - *p2;
        p1--;  // p1 向前移动一位
        p2++;  // p2 向后移动一位
    }
    return str;  // 返回反转后的字符串
}

回文串判断

大致思路:

利用双指针,p1指向字符串的首部,p2指向字符串的末尾。循环len/2次判断 *p1++ != *p2-- 。

#include <string.h>
bool judge(char* str ) {
    // write code here
    int len;  // 声明一个整型变量,用于存储字符串的长度
    len = strlen(str);  // 使用 strlen 函数获取字符串的长度

    char *p1 = str;  // 声明指针 p1,并初始化为指向字符串的起始位置
    char *p2 = &str[len-1];  // 声明指针 p2,并初始化为指向字符串的最后一个字符
    int i = 0;  // 声明一个整型变量 i,用于循环计数

    /* 使用for循环 */
    /*
    for(i=0;i<len/2;i++)
    {
        if( *p1++ != *p2--  )
        {
            return false;  // 如果 p1 和 p2 指向的字符不相等,返回 false
        }
    }
    */

    /* 使用while循环 */
    while(i<len/2)  // 当 i 小于字符串长度的一半时,继续循环
    {
        if( *p1++ != *p2--  )  // 如果 p1 和 p2 指向的字符不相等
        {
            return false;  // 返回 false
        }
        i++;  // 增加计数器 i
    }

    return true;  // 如果所有对应字符都相等,返回 true
}

 


字符串

字符串变形

// 反转函数
void reverse(char* s, int head, int tail) {
    while (head < tail) {  // 当头指针小于尾指针时,继续交换
        s[head] = s[head] + s[tail];  // 交换 s[head] 和 s[tail] 的值
        s[tail] = s[head] - s[tail];
        s[head] = s[head] - s[tail];
        head++;  // 头指针向后移动
        tail--;  // 尾指针向前移动
    }
}

// 主函数
char* trans(char* s, int n) {
    // 翻转整个字符串
    reverse(s, 0, n - 1);  // 调用反转函数,反转整个字符串

    int i = 0, j = 0;  // 声明两个整型变量,用于遍历字符串
    while (i < n) {  // 遍历整个字符串
        j = i;  // j 初始化为 i 的值
        // 按照空格分段进行大小写切换,部分反转
        while (j < n && s[j] != ' ') {  // 找到当前单词的末尾
            // 切换大小写
            if (s[j] >= 'A' && s[j] <= 'Z') {  // 如果是大写字母
                s[j] += 32;  // 转换为小写字母
            } else if (s[j] >= 'a' && s[j] <= 'z') {  // 如果是小写字母
                s[j] -= 32;  // 转换为大写字母
            }
            j++;  // j 向后移动
        }
        // 把这一段翻转
        reverse(s, i, j - 1);  // 调用反转函数,反转当前单词
        i = j + 1;  // i 移动到下一个单词的起始位置
    }
    return s;  // 返回变形后的字符串
}


http://www.kler.cn/a/524153.html

相关文章:

  • SQL注入漏洞之高阶手法 宽字节注入以及编码解释 以及堆叠注入原理说明
  • 17.Word:李楠-学术期刊❗【29】
  • HarmonyOS DevEco Studio模拟器点击运行没有反应的解决方法
  • Oracle迁移DM数据库
  • HTML特殊符号的使用示例
  • 基于ollama,langchain,springboot从零搭建知识库三【解析文档并存储到向量数据库】
  • GPU上没程序在跑但是显存被占用
  • [Java]快速入门
  • 2024年MR应用深度解析:Meta商店中的游戏与非游戏应用
  • 自主shell命令行解释器
  • HSM能为区块链、IoT等新兴技术提供怎样的保护?
  • fps一些内容添加
  • 构建 QA 系统:基于文档和模型的问答
  • [CISCN2019 华东南赛区]Web41
  • CTF-web: phar反序列化+数据库伪造 [DASCTF2024最后一战 strange_php]
  • 计算机毕业设计PySpark+hive招聘推荐系统 职位用户画像推荐系统 招聘数据分析 招聘爬虫 数据仓库 Django Vue.js Hadoop
  • 解决 Postman 报错一直转圈打不开
  • 2024年度技术总结——MCU与MEMS和TOF应用实践
  • Qt监控系统辅屏预览/可以同时打开4个屏幕预览/支持5x64通道预览/onvif和rtsp接入/性能好
  • 双层Git管理项目,github托管显示正常
  • springboot服务器端默认60秒超时的解决方法
  • leetcode_链表 234.回文链表
  • docker commit命令解析(将容器的当前状态保存为一个新的镜像)
  • AI如何革新工程建造物资管理
  • C#操作GIF图片(下)将一帧一帧的图片合并成gif
  • css 实现进度条和数字自增动画效果