在字符串中的单词之间添加空格c

时间:2016-05-18 03:38:41

标签: c spacing

我正在尝试编写一个程序,在单词之间插入空格以适合列,例如:

  • 您阅读了一行文字,例如:Good morning how are you?
  • 您读取了列的宽度,例如:40
  • 然后我计算了本文中有多少个空格(4)。
  • 现在我需要在这些单词之间分配剩余的空格,这样文本的长度就是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

2 个答案:

答案 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--;
        }
    }

这只是一个肤浅的想法。你可以进一步改进它。