【发布时间】:2015-08-11 20:31:39
【问题描述】:
我试图通过 C 编程语言书和我的练习 1-21 来工作,你必须用适量的制表符和空格替换空格块以等于相同的空间,我能够让所有东西都能正确运行和编译,但它总是在输出中放置错误数量的制表符和空格。
书中的实际问题:
编写一个程序entab,将空格字符串替换为最小值 制表符和空白的数量,以实现相同的间距。使用相同的 制表位与 detab 一样。当一个选项卡或一个空白将 足以到达制表位,应该优先考虑哪个?
再一次,伙计们,我对编程还是很陌生,所以请尽可能描述性。
if I input something like asdf asdf asdf
i get something like----- asdf asdf asdf back out.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_BUFFER 1024
#define SPACE ' '
#define TAB '\t'
#define TabSize 4
int main()
{
int c, i, j, spaces = 0, size, tempspaces, x, y, z;
int tabs = 0;
char arrayPrimary[MAX_BUFFER];
char arraySecondary[MAX_BUFFER];
/* ********************************************************************** */
for(i = 0;(c = getchar()) != EOF && c != '\n'; i++)
{
arrayPrimary[i] = c;
}
arrayPrimary[i] = '\0';
size = i;
printf("%s\n", arrayPrimary);
/* ********************************************************************** */
for(i = 0, j = 0, tempspaces = 0; i < size; i++)
{
if(arrayPrimary[i] == SPACE)
{
tempspaces++;
}
else
{
arraySecondary[j] = arrayPrimary[i];
j++;
}
if(tempspaces > 0 && arrayPrimary[i + 1] != SPACE)
{
spaces = tempspaces % TabSize;
printf("Spaces %i\n", spaces);
tabs = ((tempspaces - spaces)/TabSize);
printf("Tabs %i\n", tabs);
for(y = 0; y <= spaces; y++)
{
arraySecondary[j] = SPACE;
j++;
}
for(x = 0; x <= tabs; x++)
{
arraySecondary[j] = TAB;
j++;
}
tabs = 0;
spaces = 0;
tempspaces = 0;
}
}
arraySecondary[j + 1] = '\0';
printf("%s\n", arraySecondary);
return 0;
}
【问题讨论】:
-
您在示例输入中说“类似”。这些是确切的输入和输出,还是你只是输入了“类似”的东西?你如何看待你的输出?大多数终端的标签大小默认为 8,但您的代码有
TabSize 4。
标签: c