爱编程的小笨孩


私信TA

用户名:2119394720

访问量:24743

签 名:

我在成长,总有一天我会足够优秀。

等  级
排  名 137
经  验 7452
参赛次数 6
文章发表 44
年  龄 0
在职情况 学生
学  校 黄河科技学院
专  业 软件工程

  自我简介:

一只想要当凤凰的鸡

TA的其他文章

解题思路:
有一字符串,包含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 人评分

新上线《蓝桥杯辅导》课程,近五年的蓝桥杯省赛与国赛真题都有,从读题开始理解题意、梳理思路、实现代码再提交评测全过程,可有效提升获奖比例甚至进国赛!课程介绍、试听请猛击这里

  评论区

就喜欢讲内层原因的。赞赞赞
2022-12-31 19:11:40
不太懂题目中需要输入字符串长度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;
}
2022-12-03 12:07:25
加个getchar将回车吸收,下面就可以用gets了
2022-11-20 11:38:24
好兄弟,我在做的时候就很纳闷这个事情,想不出原因在哪里
#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]);
}
我改成这样就对了,但是不知道原因,没想到进来找一下,居然找到原因,爱炸你了
2022-11-17 15:07:59
2022-11-05 20:00:01
  • «
  • 1
  • »