0
点赞
收藏
分享

微信扫一扫

C语言——日常刷题(一)

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

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&nbsp;myStrlen(char&nbsp;s[])&nbsp;&nbsp;// 传入一个s[]数组
{
int&nbsp;i,&nbsp;len&nbsp;=&nbsp;0;&nbsp;// 该变量只在该作用域中有用,当函数结束时,变量就会自动销毁
for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;s[i]&nbsp;!=&nbsp;&#39;\0&#39;;&nbsp;i++)&nbsp;&nbsp;// 当s[i] = '\0' 循环结束
len++;&nbsp;&nbsp;// 每在 s[]中取到一个值 len +1
return&nbsp;len;&nbsp;// 循环结束返回len 的值,即数组的长度
}


/*
将str2指向的字符串连接到str1指向的数组末尾。若str1和str2指向的内存空间重叠,则作未定义处理。
*/
char*&nbsp;myStrConcat(char*&nbsp;str1,&nbsp;char*&nbsp;str2)&nbsp;&nbsp;&nbsp;// 传入2个字符串参数
{
char*&nbsp;tmp&nbsp;=&nbsp;str1;
while&nbsp;(*str1&nbsp;!=&nbsp;&#39;\0&#39;)&nbsp;&nbsp;&nbsp;//当 str1 到末尾则停止循环
{
str1++;&nbsp;&nbsp;&nbsp;&nbsp;// 前进到str1的末尾处
}
while&nbsp;((*str1++&nbsp;=&nbsp;*str2++)&nbsp;!=&nbsp;&#39;\0&#39;);&nbsp;&nbsp;// 循环复制直到遇到 str2中的 ‘\0’
return&nbsp;tmp;&nbsp;&nbsp;// 返回 str1的值
}

int&nbsp;main()
{
/*
n 数组赋值的个数,例如 n = 1 数组 k[0] 进行赋值 剩余补零,n = 5 数组k [0] k[1] k[2] k[3] k[4] 进行赋值,数组剩余补零
a 数组中要取的值的下标,不能超过定义数组的长度
b 数组中要取的值的下标,不能超过定义数组的长度
i 控制for循环的次数
*/
int&nbsp;n,&nbsp;a,&nbsp;b,&nbsp;i;&nbsp;
int&nbsp;k[15];&nbsp;&nbsp;&nbsp;&nbsp;// 定义一个长度为15的数组 
// char s[10][50] = {}, fu[50] = {}; 
char&nbsp;s[10][50]&nbsp;=&nbsp;{};&nbsp;// 定义一个二维数据 10行 50列. 初始值为 0
char&nbsp;fu[50]&nbsp;=&nbsp;{};&nbsp;&nbsp;// 定义一个 一维数组 长度 50, 初始值50

puts(&quot;请输入n的值&quot;);
scanf(&quot;%d&quot;,&nbsp;&amp;n);&nbsp;&nbsp;&nbsp;// 为n 赋值
puts(&quot;请输入a的值&quot;);
scanf(&quot;%d&quot;,&nbsp;&amp;a);&nbsp;&nbsp;&nbsp;// 为a  赋值
puts(&quot;请输入b的值&quot;);&nbsp;
scanf(&quot;%d&quot;,&nbsp;&amp;b);&nbsp;&nbsp;&nbsp;// 为b 赋值
// scanf("%d %d %d", &n, &a, &b);


puts(&quot;请为int类型&nbsp;数组&nbsp;k&nbsp;初始化&quot;);
for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;&nbsp;&nbsp;&nbsp;// k数组的长度 为 k[n],为数组的前n个位置进行赋值,剩余位置全部补零,原数组长度 15。
scanf(&quot;%d&quot;,&nbsp;&amp;k[i]);

puts(&quot;请为char类型&nbsp;数组&nbsp;s&nbsp;初始化&quot;);
for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;&nbsp;&nbsp;&nbsp;// s数组的长度 为 s[n],为数组的前n行第一个位置位置进行赋值,剩余位置 默认赋值'\0',原数组长度 15。(例如s[0][0] = 20, s[0][1] = '\0' s[0][2] = '\0', )
scanf(&quot;%s&quot;,&nbsp;s[i]);

// 如果 a的值 不等于 b的值 则调用myStrConcat 函数,对字符串进行拼接将 str2 拼接到 str1后
if&nbsp;(a&nbsp;!=&nbsp;b)
myStrConcat(s[a],&nbsp;s[b]);&nbsp;&nbsp;// 将数组第 b 个位置 拼接到 第 a 个位置后面 (例如 s[a]指的是数组的下标,从人的角度去数 位置是a + 1,因为程序的起始位置是从0开始的)
else&nbsp;if&nbsp;(a&nbsp;==&nbsp;b)&nbsp;&nbsp;&nbsp;// 如果 a的值 等于 b的值
{
for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;myStrlen(s[a]);&nbsp;i++)&nbsp;&nbsp;// 调用 myStrlen函数 得到 s[a]下标对应值的长度
fu[i]&nbsp;=&nbsp;s[a][i];&nbsp;&nbsp;&nbsp;// s[a][i] 当 i大于等于1时,值都是为'\0',只有当 i = 0时,才会有值,初始值赋值n个位置,就有n个值
myStrConcat(s[a],&nbsp;fu);&nbsp;&nbsp;// 将fu [] 的值 拼接到 s[a] 的后面的到一个新的 s[a]的值
}
puts(&quot;打印数组中每一个下标对应的值的长度&quot;);
for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)&nbsp;&nbsp;// 由于 只为s[]数据的前n个位置赋值,所以在这里循环n次
{
if&nbsp;(i&nbsp;==&nbsp;0)
printf(&quot;s[%d]&nbsp;=&nbsp;%d\n&quot;,&nbsp;i,&nbsp;myStrlen(s[i]));&nbsp;// 打印数组中每一个下标对应的值的长度(例如:s[0] 长度为1 打印 1,s[5] 长度为7 打印 7,跟数组中具体值没有关系)
else
printf(&quot;s[%d]&nbsp;=&nbsp;%d\n&quot;,&nbsp;i,&nbsp;myStrlen(s[i]));
}
printf(&quot;\n&quot;);


puts(&quot;遍历数组k[]的值&quot;);
for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)
printf(&quot;k[%d]&nbsp;=&nbsp;%d\n&quot;,&nbsp;i,&nbsp;k[i]);

puts(&quot;遍历数组s[]的值&quot;);
for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)
printf(&quot;s[%d]&nbsp;=&nbsp;%s\n&quot;,&nbsp;i,&nbsp;s[i]);

puts(&quot;遍历数组s[k[i]]的值&quot;);
for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;n;&nbsp;i++)
printf(&quot;s[%d]&nbsp;=&nbsp;%s\n&quot;,&nbsp;i,&nbsp;s[k[i]]);&nbsp;&nbsp;// 将k[]数组中的值作为 s[]数组的下标, 如果打印为空值,说明s[]对应的下标位置没有进行赋值,默认赋值'\0'


return&nbsp;0;
}

举报

相关推荐

日常刷题(24)

C语言刷题3

每日C语言刷题

C语言编程题日常练习3

LeetCode c语言刷题000

0 条评论