我正在尝试编写一个程序,在单词之间插入空格以适合列,例如:
Good morning how are you?
40
。例如:
Good morning how are you?
1234567890123456789012345678901234567890
当我尝试在单词之间插入空格时,我的问题出现了,因为我不知道如何做到这一点。这是我到目前为止所做的。
#include <stdio.h>
#include <string.h>
char text[65], spaces[50], ch;
int i, remainder, spacesr, count, column, length, distribution;
int main(){
i = 0;
count = 0;
printf("Please enter a line of text: ");
while(ch != '\n')
{
ch = getchar();
text[i]=ch;
i++;
}
text[i]='\0';
printf("Text: %s",text);
printf ("Please enter the width of the column: ");
scanf ("%d", &column);
for (i = 0; text[i] != '\0'; i++) {
if (text[i] == ' ') {
count++;
}
}
length = strlen(text);
spacesr = column - length;
distribution = spacesr / count;
remainder = spacesr % count;
if (length > column) {
printf ("ERROR: Length of text exceeds column width.");
}
}
我已经计算了读入文本中的空格量,然后计算了我剩余的空间量,然后除以空格量来确定我需要在每个单词之间放置多少空格。在输入主空格后,这些空间的其余部分将均匀分布。
主要空间是什么意思?
基本上我想说“早上好,你好吗?”通过在单词之间添加空格来扩展40个字符的列。有可能做这样的事情:
for (i = 0; text[i] != '\0'; i++) {
if (text[i] == ' ') {
then add a certain amount of spaces to it
答案 0 :(得分:0)
您需要将输入字符串分成单独的单词。查看this earlier question on StackOverflow的答案,了解可用于此的一些技巧。
之后,只需要在两者之间发出正确数量的空格即可。
答案 1 :(得分:0)
执行此操作的众多方法之一。
假设totalSpace是我们必须符合字符串的缓冲区长度。 和str =我们拥有的原始字符串。
ALGO:
int extraSpace = totalSpace - strlen(str);
int numWords = findWordsInString(str);
int numSpaces = numWords - 1;
int incrementEachSpaceby = extraSpace/numSpace;
//Now linear scan of str and increase spaces by value of incrementEachSpaceby
char *newStr = malloc(totalspace);
int i =0, int j = 0;
int k;
while (i < strlen(str) && j < totalspace)
{
while (str[i] != ' ') {
newStr[j++] = str[i++];
}
while (str[i] == ' ')
newStr[j++] = str[i++];
k = incrementEachSpaceby;
while (k) {
newStr[j++] = ' ';
k--;
}
}
这只是一个肤浅的想法。你可以进一步改进它。