【发布时间】:2015-09-30 08:27:15
【问题描述】:
我收到了一个分配问题,到目前为止我已经设法解决了所有问题,除了在几个(输入确定的)字符之间拆分余数。 任何帮助将不胜感激。 作为参考,我的作业问题是:
“如果你看一份报纸,你会发现文字被对齐以适合列。编写一个程序,读取报纸中列的宽度,然后读取一行文本。对齐文本行以适应该宽度的列。当您的程序运行时,屏幕应如下所示:
输入列宽:40 输入一行文字:早上好,你好吗? 12345678901234567890123456789012345678901234567890... 早上好你好吗?对齐是通过计算文本中的空白数来完成的。在上面的示例中,有 4 个间隙。然后每个间隙都必须添加空格。额外空间的数量必须尽可能均匀地分配。在上面的例子中,前三个空格各有 5 个空格,最后一个空格有 4 个空格。
注意事项:
- 如果文本比列长,则必须报告错误 - 不要尝试将其分成两行!
- 假设文本中包含多个单词。
- 注意由 123456789012345678.... 组成的标题行,这对于检查结果很有用。 您可以随意设置此标题行 - 70 个空格将是一个有用的长度。
"
到目前为止,我的代码是:
int main() {
//input column width
printf("Enter the width of the column: ");
int column;
scanf("%d", &column);
//input text line
printf("Enter a line of text: ");
char string[80];
getchar();
gets(string);
//print 1234567890 column header
int y = 1,x = 0;
while(x < column){
if(y > 9){
y = 0;
}
printf("%d", y);
y++;
x++;
}
printf("\n");
//count spaces
int i = 0;
int space_count = 0;
while(string[i] != '\0'){
if(string[i] == 0x20){
space_count++;
}
//printf("%c", string[i]);
i++;
}
//work out variables
int string_length = i;
int remainder_space = (column - string_length);
int space_power = (remainder_space / space_count);
//int oddremainder = (space_count % remainder_space) ;
//space_power = (space_power + oddremainder);
//if
//remainder %
//insert column width check
if(string_length > column)
{
printf("Text is too long. Shouldn't be more than %dcharacters\n",
column);
return 1;
}
//output
i = 0;
while(string[i] != '\0'){
if(string[i] == 0x20){
for(x = 0; x < space_power; x++){
printf("%c", 0x20);
}
}
printf("%c", string[i]);
i++;
}
很抱歉,如果这不是恰当的提问方式,我的大脑已经炸了,我无法理解这个问题。 任何正确方向的指示或讨论将不胜感激。
【问题讨论】:
-
说来话长,但似乎缺少一个具体问题。 (对于它的价值,乍一看你似乎在按照要求做。)
-
要求中有一个谎言:'每个间隙必须有空格'。绝对不是!如果输入行适合给定的列宽,或者短了一个,那么没有间隙或最多需要添加一个空格。
-
此外,输入行中没有关于空格的假设——因此可能是连续的空格,例如
Hello,___my____little_kitty(空格替换为下划线以规避默认的 HTML 渲染器空间压缩)。那么应该将添加的空格均匀分布到输入字符串中,还是将所有空格分布到结果输出字符串中? -
如果输入行以空格开头或结尾会发生什么?他们应该被保留吗?行的头部或尾部的空白是否应该扩展到公共宽度(等于内部间隙)...?
标签: c