【编程经验】优秀题解

题解详情:

这道题目我的思路如下:

1) 定义一个字符指针数组,用来存放将要输入的各个字符串的指针(用动态内存分配开辟空间存放数组)

2) 遍历这个字符指针数组,前N行字符串原样输出

3) 余下的字符串以空格或回车分割依次按行输出

该程序几处需要注意的地方:

1、因为我习惯用scanf("%[^\n]", strtmp)输入字符串的方式,所以在输入最开始的正整数N之后的回车换行符和接下来每次输入一个字符串后的回车换行符都得使用getchar函数吃掉,要不然会出现错误!

2、在思路3)中我使用了这个技巧:while ((c = *(inputstr[index]++)) != '\0')。即通过指针的方式获取这个字符串对应的每个字符,碰到结束符'\0'才结束循环,当c为空格符时,就连续输入两个换行符,当c不是空格符时直接输出。

参考代码:

#include <stdio.h>

#include <string.h>

#include <malloc.h>

int main(void)

{

int N;

scanf("%d", &N);

if (N > 100) //输入的N最多为100 超过则直接退出

{

return -1;

}

getchar(); //吃掉上面输入中回车符给下面输入字符串带来的影响

char *inputstr[N + N]; //定义一个字符指针数组,用来存放将要输入的各个字符串的指针

char strtmp[1000]; //strtmp临时变量存放每次输入的字符串

int i = 0; //字符指针数组下标

while (scanf("%[^\n]", strtmp) != EOF)

{

getchar(); //吃掉上一个字符串中回车符对下一个字符串输入带来的影响

//对于每个字符串动态分配空间并拷贝

int len = strlen(strtmp);

inputstr[i] = (char*)malloc(len + 1);

strcpy(inputstr[i], strtmp);

i++;

}

int index = 0;

for (index = 0; index < i; index++)

{

if (index < N) //前N行字符串原样输出

{

printf("%s\n", inputstr[index]);

printf("\n");

}

else //余下的字符串以空格或回车分割依次按行输出

{

char c;

while ((c = *(inputstr[index]++)) != '\0')

{

if (c == ' ')

{

putchar(' ');

printf("\n\n");

}

else

{

putchar(c);

}

}

}

}

return 0;

}

原文发布于微信公众号 - 编程范(dotcpp)

原文发表时间:2018-07-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PHP在线

PHP Predefined Interfaces 预定义接口

SPL提供了6个迭代器接口: Traversable遍历接口(检测一个类是否可以使用 foreach 进行遍历的接口)Iterator迭代器接口(可在内部迭代自...

36450
来自专栏Fish

两天了解scala

最前面的话 因为spark的源语言是scala,所以,为了看懂spark的操作并且为了以后看spark源码做准备,先看scala还是很有必要的。另外这里主要是看...

20590
来自专栏青玉伏案

窥探Swift之函数与闭包的应用实例

今天的博客算是比较基础的,还是那句话,基础这东西在什么时候都是最重要的。说到函数,只要是写过程序就肯定知道函数是怎么回事,今天就来讨论一下Swift中的函数的特...

20250
来自专栏猿人谷

C++ primer里的template用法

template 的用法     在程序设计当中经常会出现使用同种数据结构的不同实例的情况。例如:在一个程序中     可以使用多个队列、树、图等结构来组织数据...

23150
来自专栏阮一峰的网络日志

JavaScript 有多灵活?

JavaScript 是一种灵活的语言,表达力极强,我来举一个例子,保证让很多人大吃一惊。 本文受到了 Kyle Simpson 的文章《Iterating E...

33770
来自专栏偏前端工程师的驿站

Java魔法堂:String.format详解

  目录                               一、前言 二、重载方法 三、占位符 四、对字符、字符串进行格式化 五、对整数进...

25180
来自专栏我和我大前端的故事

初探 TypeScript函数基本类型泛型接口类内置对象

前段时间有朋友和我推荐 TypeScript ,他说写起来特别爽,让我去试一试,那时候我还在那是啥高深莫测的东西。刚好那段时间忙,一直没有时间看。最近也很忙,还...

65720
来自专栏极客编程

ECMAScript 6教程 (二) 对象和函数

上面代码的方法一是直接用标识符作为属性名,方法二是用表达式作为属性名,这时要将表达式放在方括号之内。

11140
来自专栏小樱的经验随笔

【Java学习笔记之十九】super在Java继承中的用法小结

1)有人写了个很好的初始化属性的构造函数,而你仅仅想要在其中添加另一些自己新建属性的初始化,这样在一个构造函数中调用另外一个构造函数,可以避免重复的代码量,减少...

34250
来自专栏博客园

.NET面试题解析(01)-值类型与引用类型

3. delegate是引用类型还是值类型?enum、int[]和string呢?

10020

扫码关注云+社区

领取腾讯云代金券