💻一) 题目要求
要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。
函数接口定义:
void strmcpy( char *t, int m, char *s );
函数strmcpy将输入字符串char *t中从第m个字符开始的全部字符复制到字符串char *s中。若m超过输入字符串的长度,则结果字符串应为空串。
裁判测试程序样例:
#include <stdio.h> #define MAXN 20 void strmcpy( char *t, int m, char *s ); void ReadString( char s[] ); /* 由裁判实现,略去不表 */ int main() { char t[MAXN], s[MAXN]; int m; scanf("%d\n", &m); ReadString(t); strmcpy( t, m, s ); printf("%s\n", s); return 0; } /* 你的代码将被嵌在这里 */
💻二) 题解
从第m个字符开始:指向t中第m个元素,第m个元素即*(t+m-1)
循环执行 s = t ; s++; t++; 直到t中遇到 ‘\0’ ,循环结束
⭐注意:最后一次循环,t++以后t = ‘\0’,s++以后没有执行任何操作,此时s指向的位置是空的,
最后在循环外s = ‘\0’,(给这个空的位置填上结束标志’ \0 ')
void strmcpy( char *t, int m, char *s ) { t = t+m-1; while(*t!='\0') { *s = *t; s++; t++; } *s = '\0'; }