实现如下两个函数(不调用库函数):

int myStrLen(char *s);

该函数功能为求字符串s的长度。

void myStrConcat(char *string1, char *string2);

该函数的功能为将字符串string2拼接至字符串string1后边。
注意: 该函数的两个参数,在调用时有可能会指向同一个字符串,函数需要在这种情况下能正确完成指定的功能。

主函数要求使用以上两个函数实现如下功能:
输入:
第一行为三个整数 n( 0 < n < 10 ), a, b, 第二行为n个整数,后边为n行字符串,每个字符串长度不超过20。

输出:

  1. 要求首先将第 b 行字符串拼接至第 a 行的字符串后再输出。
  2. 第一行为 n 个用单个空格分隔的整数(最后一个数后无空格),为按各字符串的输入次序输出的各字符串的长度。
  3. 后边 n 行为将输入的字符串按输入的第 2 行给出的顺序依次输出。
  4. 输入保证合法且字符串中不包含空格。
#include<stdio.h>int myStrlen(char s[])  // 传入一个s[]数组
{int i, len = 0; // 该变量只在该作用域中有用,当函数结束时,变量就会自动销毁for (i = 0; s[i] != '\0'; i++)  // 当s[i] = '\0' 循环结束len++;  // 每在 s[]中取到一个值 len +1return len; // 循环结束返回len 的值,即数组的长度
}/*将str2指向的字符串连接到str1指向的数组末尾。若str1和str2指向的内存空间重叠,则作未定义处理。
*/
char* myStrConcat(char* str1, char* str2)   // 传入2个字符串参数
{char* tmp = str1;while (*str1 != '\0')   //当 str1 到末尾则停止循环{str1++;    // 前进到str1的末尾处}while ((*str1++ = *str2++) != '\0');  // 循环复制直到遇到 str2中的 ‘\0’return tmp;  // 返回 str1的值
}int main()
{/*n 数组赋值的个数,例如 n = 1 数组 k[0] 进行赋值 剩余补零,n = 5 数组k [0] k[1] k[2] k[3] k[4] 进行赋值,数组剩余补零a 数组中要取的值的下标,不能超过定义数组的长度b 数组中要取的值的下标,不能超过定义数组的长度i 控制for循环的次数*/int n, a, b, i; int k[15];    // 定义一个长度为15的数组 // char s[10][50] = {}, fu[50] = {}; char s[10][50] = {}; // 定义一个二维数据 10行 50列. 初始值为 0char fu[50] = {};  // 定义一个 一维数组 长度 50, 初始值50puts("请输入n的值");scanf("%d", &n);   // 为n 赋值puts("请输入a的值");scanf("%d", &a);   // 为a  赋值puts("请输入b的值"); scanf("%d", &b);   // 为b 赋值// scanf("%d %d %d", &n, &a, &b);puts("请为int类型 数组 k 初始化");for (i = 0; i < n; i++)    // k数组的长度 为 k[n],为数组的前n个位置进行赋值,剩余位置全部补零,原数组长度 15。scanf("%d", &k[i]);puts("请为char类型 数组 s 初始化");for (i = 0; i < n; i++)    // s数组的长度 为 s[n],为数组的前n行第一个位置位置进行赋值,剩余位置 默认赋值'\0',原数组长度 15。(例如s[0][0] = 20, s[0][1] = '\0' s[0][2] = '\0', )scanf("%s", s[i]);// 如果 a的值 不等于 b的值 则调用myStrConcat 函数,对字符串进行拼接将 str2 拼接到 str1后if (a != b)myStrConcat(s[a], s[b]);  // 将数组第 b 个位置 拼接到 第 a 个位置后面 (例如 s[a]指的是数组的下标,从人的角度去数 位置是a + 1,因为程序的起始位置是从0开始的)else if (a == b)   // 如果 a的值 等于 b的值{for (i = 0; i < myStrlen(s[a]); i++)  // 调用 myStrlen函数 得到 s[a]下标对应值的长度fu[i] = s[a][i];   // s[a][i] 当 i大于等于1时,值都是为'\0',只有当 i = 0时,才会有值,初始值赋值n个位置,就有n个值myStrConcat(s[a], fu);  // 将fu [] 的值 拼接到 s[a] 的后面的到一个新的 s[a]的值}puts("打印数组中每一个下标对应的值的长度");for (i = 0; i < n; i++)  // 由于 只为s[]数据的前n个位置赋值,所以在这里循环n次{if (i == 0)printf("s[%d] = %d\n", i, myStrlen(s[i])); // 打印数组中每一个下标对应的值的长度(例如:s[0] 长度为1 打印 1,s[5] 长度为7 打印 7,跟数组中具体值没有关系)elseprintf("s[%d] = %d\n", i, myStrlen(s[i]));}printf("\n");puts("遍历数组k[]的值");for (i = 0; i < n; i++)printf("k[%d] = %d\n", i, k[i]);puts("遍历数组s[]的值");for (i = 0; i < n; i++)printf("s[%d] = %s\n", i, s[i]);puts("遍历数组s[k[i]]的值");for (i = 0; i < n; i++)printf("s[%d] = %s\n", i, s[k[i]]);  // 将k[]数组中的值作为 s[]数组的下标, 如果打印为空值,说明s[]对应的下标位置没有进行赋值,默认赋值'\0'return 0;
}

C语言——日常刷题(一)相关推荐

  1. C语言百日刷题第七天

    C语言百日刷题第七天 61. 写一个函数isPowerOfTwo判断是不是2的幂次方 62. 写一个函数isPowerOfThree判断是不是3的幂次方 63.n 的第 k 个因子 64.有效的完全平 ...

  2. C语言百日刷题第二天

    C语言百日刷题第二天 11. 统计输入数据的正负个数 12.学生基本信息输入输出 13.杨辉三角的前n行 14.模拟用户登录情景 15.演示多个字符从两端移动,向中间汇聚 16.计算短信费用 17.编 ...

  3. C语言百日刷题第十三天

    前言 今天是刷题第13天,放弃不难,但坚持一定很酷~ 临近期末,再刷一套模拟题 C语言百日刷题第十三天 前言 选择题 判断题 编程题 选择题 1.若由定义int*p1,*p2,m=5,n;以下赋值语句 ...

  4. C语言百日刷题第五天

    C语言百日刷题第五天 41.实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定 42.实现一个函数来交换两个整数的内容. 43.实现一个函数来进行整型有序数组的二分查找 44.接收一个无符号整型 ...

  5. C语言百日刷题第十天

    前言 今天是刷题第10天,放弃不难,但坚持一定很酷~ 快来跟我一起刷题吧. C语言百日刷题第十天 前言 81.连接两个字符串 82.输入一行字符,分别统计其中英文字母.空格.数字和其他字符的个数. 8 ...

  6. C语言百日刷题第八天

    前言 今天是刷题第8天,放弃不难,但坚持一定很酷~ 快来跟我一起刷题吧. 刷题第八天目录 前言 71.打印7层杨辉三角形 72.重新排列数组 73.冒泡排序 74.将数字变成0的操作次数 75.四叶玫 ...

  7. 洛谷日常刷题(洛谷官方题单 思路+详解)

    目录 前言 非官方题单的题 P1141 01迷宫 1-4 递推与递归 P1255 数楼梯 1002 [ NOIP 2002 普及组]过河卒 P1044 [NOIP2003 普及组] 栈 P1028 [ ...

  8. c语言getchar_二级C语言试题刷题录

    2020.9 计算机二级C语言科目 选择题 标黑的为正确选项 程序流程图中带有箭头的线段表示的是 ==控制流== 图元关系.数据流.调用关系 当图为数据流图的时候,标有名字的箭头表示数据流 结构化程序 ...

  9. C语言PAT刷题 - 1020 月饼

    作者的话:若有朋友复制代码去PAT试着运行遇到问题的: 1.可能是格式问题,可以先把从本站复制的代码粘贴到记事本,再把记事本里的代码复制,然后粘贴到PAT的代码区,提交本题回答,应该就可以了: 2.可 ...

最新文章

  1. android 自定义 styleable 属性
  2. 编写python高质量python代码的59个有效方法
  3. linux中怎样进入桌面目录,linux – 如何获得给定用户“桌面路径”
  4. 爬虫笔记:Requests库详解
  5. 谜题 (Puzzle,ACM/ICPC World Finals 1993,UVa227)
  6. 移动端常见的一些兼容性问题
  7. [剑指offer]面试题第[53-1]题[JAVA][在排序数组中查找数字-1][二分法][暴力法]
  8. linux chattr修改文件属性,linux chattr(改变文件属性)
  9. 如何在10亿个数中找到前1000大的数?
  10. ordfilt2非线性滤波器
  11. scala学习笔记一------初步了解scala
  12. 软件需求跟踪矩阵例子
  13. 如何提高项目管理效率
  14. 石墨烯和富勒烯的区别?-供应石墨烯微片粉末/单层的多孔石墨烯前驱物/三维石墨烯网络结构复合材料块体定制
  15. 2018太原理工计算机二级,太原理工大学2018年度全面绩效考核结果和发放考核绩效的通知...
  16. ready等方法 微信小程序_微信小程序开发一些经验
  17. 贵州建筑施工劳务资质备案流程
  18. 产品经理必读:敏捷开发中的需求管理过程全解
  19. 新手在Manjaro环境中安装pycharm--供参考
  20. 「干货」用 Vue + Echarts 打造你的专属可视化界面(上)

热门文章

  1. 关于前端缓存的一个封装思路
  2. 网络生活点滴 网络管理实用8招技巧
  3. 栅格数据的像素值保存问题
  4. c语言外部中断th0,帮忙看看void int0() interrupt 1 //采用中断0 控制节拍 { TH0=0xd8; TL0=0xef; n--; } 啥意思...
  5. jQuery on()方法
  6. css3 text-shadow 为网页字体添加阴影
  7. 数据列表DataList模板之实例
  8. 机房收费系统重构之存储过程的使用
  9. TextView 的ScrollView滚动效果
  10. Android提高十六篇之使用NDK把彩图转换灰度图