这道题目我的思路如下:
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; }
那么问题来了...
为啥这个程序还是不能通过...一直是答案错误 也是很心累 求大神告知!!
欢迎留言交流!
0.0分
29 人评分
#include <stdio.h> #include <string.h> int main(void) { int i = 0, j = 0, N = 0, count = 0, len = 0; char str[128][1001] = {'\0',}; scanf("%d%c", &N); while (1) { if (NULL == gets(str[count++]))break; } for (i = 0; i < N; ++i) { printf("%s\n\n", str[i]); } for (i = N; i < count; ++i) { len = strlen(str[i]); for (j = 0; j < len+1; ++j) { if (str[i][j] == ' ' || str[i][j] == ' ' || str[i][j] == '\0') { printf("\n\n"); } else { printf("%c", str[i][j]); } } } return 0; } 这样也可以
未知大小,定义字符指针数组里面char *inputstr[N];N不能是位置 不然内存无法分配空间 char *inputstr[5];这样正确
想法很好,但是在c语言中所有声明语句必须在所有执行语句之前!你的定义数组和指针的语句前面还有scanf等非声明语句
WU-链表数据求和操作 (C++代码)浏览:1382 |
2006年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:503 |
Cylinder (C语言描述+详细分析)浏览:3374 |
1017题解浏览:663 |
1054题解浏览:516 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:692 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:748 |
老王赛马 (C++代码)浏览:973 |
C语言训练-求矩阵的两对角线上的元素之和 (C语言代码)浏览:1015 |
ACM俱乐部密码浏览:948 |