用换行符替换空格

时间:2016-07-08 20:53:10

标签: c

我试图为Ti-89计算器做一个带线路替换器的空间,这样我就可以打印线条而不会因为水平字符长度而被剪切。他们通常看起来像这样

This is a pretty long test
ing for the Ti89 Calculator

我希望他们看起来像这样

 This is a pretty long
 testing for the Ti89
 Calculator

我尝试使用此代码

void _print_line(char* string)
{
        int k = strlen(string);
        if(k > 26)
        {
                int n = 0;
                int c = 25;
                while(n == 0)
                {
                        if(string[c] == 32)
                        {
                                n = 1;
                        }
                        else
                        {
                                c--;
                        }
                        if(c <= 0)
                        {
                                n = 2;
                        }
                }
                if(n == 1)
                {
                        string[c] == '\n';
                }
        }
        printf("%s\n", string);
}

但似乎只是忽略它并像第一个例子那样继续打印它。

3 个答案:

答案 0 :(得分:3)

您没有插入回车。

替换 string[c] == '\n';

使用 string[c] = '\n';

答案 1 :(得分:0)

如Till所说,你没有插入回车。这条线

string[c] == '\n';

需要

string[c] = '\n';

差异是一个&#34;等于&#34;标志与两个。

原因是&#34; ==&#34;是一个条件运算符,其值为true或false,而&#34; =&#34;是赋值运算符,它将值设置为变量。

答案 2 :(得分:0)

需要处理整个字符串。

记录当前输出字符位置,以便在输出下一个单词时检查是否超出指定的宽度 像这样:

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define DISP_OUT   stdout
#define DISP_WIDTH 26

int disp_one(char ch){
    static int pos;
    fputc(ch, DISP_OUT);
    if(ch == '\n')
        pos = 0;
    else
        ++pos;
    if(pos == DISP_WIDTH){
        fputc('\n', DISP_OUT);
        pos = 0;
    }
    return pos;
}

typedef enum word_break {
    KEEP, BREAK
} WORD_BREAK;

void disp(const char *str, WORD_BREAK word_break){
    static int pos;

    switch(word_break){
    case BREAK:
        while(*str){
            pos = disp_one(*str++);
        }
        break;
    case KEEP:
        while(*str){
            if(isspace((unsigned char)*str)){
                pos = disp_one(*str++);
                continue;
            }
            const char *end = str;//end : word end (find delimiter)
            while(*end && !isspace((unsigned char)*end))
                ++end;

            int len = end - str;//length of next output word
            if(pos + len >= DISP_WIDTH && len < DISP_WIDTH){
                pos = disp_one('\n');
            }
            while(str < end){
                pos = disp_one(*str++);
            }
        }
        break;
    }
}

int main(void){
    char *text = "This is a pretty long testing for the Ti89 Calculator";

    disp(text, BREAK);
    disp("\n", BREAK);
    disp(text, KEEP);
    return 0;
}