解题思路:
在全局定义一个指针数组,用于指向后面输入的字符串;
开始输入数n,之后的n个字符串用gets函数来接收(gets函数能接收空格);
之后的字符串就用普通的cin或者scanf来接收,依次用数组指针指向这些字符串;
最后利用这个指针数组来进行输出;
注意事项:
主要是那个输入缓冲区的问题,用cin和scanf输入的时候都会留一个换行到输入缓冲区中;
而gets函数或者cin.get或cin.getline函数一识别到输入缓冲区中有换行就结束了;
参考代码:
#include<iostream>
#include<string.h>
using namespace std;
char *p[128] = { NULL };
int main(void)
{
int n;
cin >> n;
char buf[100] = { 0 };
int count = 0; //记录一共输入了多少字符串
gets(buf); //将缓冲区的换行接收,相当于刷新输入缓冲区,虽然标准的是用cin.sync()函数或fflush(stdin)来刷新,
//但是这OJ编不过;
/*
如果此处没有刷新输入缓冲区,那么还有一个换行在缓冲区中,
之后的gets函数就会将这个换行当成结束符,从而直接结束第一次的gets输入;
*/
while (count < n) //用gets函数接收前n个字符串,可以接收空格;
{
gets(buf);
int len = strlen(buf);
p[count] = new char[len + 1];
strcpy(p[count], buf);
count++;
memset(buf, 0, sizeof(buf)); //将buf中的所有元素置0;
}
while (~scanf("%s", buf)) //之后的字符串用scanf接收;
{
int len = strlen(buf);
p[count] = new char[len + 1];
strcpy(p[count], buf);
count++;
memset(buf, 0, sizeof(buf));
}
for (int i = 0; i < count; i++) //输出的同时释放所有new出来的空间,避免造成内存泄漏;
{
cout << p[i] << endl;
if (i != count - 1)
cout << endl;
if (p[i] != NULL)
{
delete p[i];
p[i] = NULL;
}
}
return 0;
}
0.0分
11 人评分
校门外的树 (C语言代码)浏览:700 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:592 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:548 |
DNA (C语言代码)浏览:749 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:682 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:664 |
C二级辅导-统计字符 (C语言代码)浏览:480 |
蛇行矩阵 (C语言代码)浏览:504 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:956 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:772 |