解题思路:
有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。首先定义一个n表示字符串包含的字符个数,然后定义一个字符数组str保存字符串(在C语言中,没有字符串数据类型,所以字符串需要保存在字符数组中),然后定义一个m表示从字符的第m个字符开始往后生成一个新的字符串。在代码中用循环输出新产生的字符串,从m-1开始循环是因为在数组中,下标是从0开始计的,所以我们平时说的第m个数在数组中也就是第m-1个数。
注意事项:
在本道题中,输入字符串的时候我没有使用gets直接接受是因为gets和scanf连用时会出现错误,为什么会出现问题呢?我们以本道题为例来解释这一问题:
在代码中,首先我们用scanf接受一个数字6作为n的值,但是我们并不是只输入了一个数字6,还有一个回车。回车是scanf结束的标志,但是却不被scanf接受,那么多出来的回车去哪了呢,如果用gets来输入字符串,那么第一个scanf结束时输入的回车就回被get接受,但是回车也是gets结束的标志,然后第二步输入的字符串就回被下一行的scanf接受,但是这一行的scanf接受的应该是一个整数,但是我们却传入了一个字符串,所以就会出错。因此这里最好不要使用gets。可以直接使用scanf("%s",&str);来接受一个字符串。
参考代码:
#include<stdio.h> int main() { int n; char str[100]; int m; scanf("%d",&n); scanf("%s",&str); scanf("%d",&m); for(int i=m-1;i<n;i++) { printf("%c",str[i]); } return 0; }
0.0分
30 人评分
不太懂题目中需要输入字符串长度n干嘛。。。 #include<stdio.h> #include<string.h> void COPY(char a[],int n) { int len=strlen(a); char b[200]; int tag=0; for(int i=n-1;i<len;i++) { b[tag]=a[i]; tag++; } for(int j=0;j<tag;j++) printf("%c",b[j]); } int main() { int n; scanf("%d",&n); getchar(); char a[200]; gets(a); int x; scanf("%d",&x); COPY(a,x); return 0; }
好兄弟,我在做的时候就很纳闷这个事情,想不出原因在哪里 #include<stdio.h> int main() { int i,n,m; char a[100]; scanf("%d",&n); for(i=0;i<n+1;i++) { scanf("%c",&a[i]); } scanf("%d",&m); for(i=m-1;;i++) if(a[i]=='\0') break; else printf("%c",a[i]); } 我改成这样就对了,但是不知道原因,没想到进来找一下,居然找到原因,爱炸你了
H2230819052 2022-11-17 15:17:22 |
#include<stdio.h> int main() { int i,n,m; char a[100]; scanf("%d",&n); for(i=0;i<n+2;i++) { scanf("%c",&a[i]); } scanf("%d",&m); for(i=m;i<n+1;i++) printf("%c",a[i]); return 0; }这是改了以后的
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:669 |
C语言训练-排序问题<2> (C++代码)浏览:936 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:481 |
A+B for Input-Output Practice (V) (C++代码)浏览:485 |
大神老白 (C语言代码)浏览:696 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:798 |
DNA (C语言代码)浏览:837 |
陈教主的三角形 (C语言代码)浏览:1201 |
震宇大神的杀毒软件 (C语言代码)浏览:1165 |
C语言程序设计教程(第三版)课后习题8.3 (C语言代码)浏览:620 |