按字符打印字符串char,不带空格

时间:2019-10-15 17:42:35

标签: c string pointers printf

在我的作业问题中,我的讲师希望我们编写一个程序,该程序将在新行上逐字符打印一个字符串字符,但是将忽略空格,并在同一行上打印重复字符。例如,以char打印“ Hello World” char将返回

H
e
ll
o
W
o
r
l
d

我已经能够获取代码来逐个字符地打印字符串,但是我无法在同一行上打印重复项或忽略空格。我看过其他一些类似的问题,这似乎不是一件容易的事。

#include <stdio.h>

void print_string(const char instring[]);

int main(void)
{
    print_string("Hello World");
    return 0;
}

void print_string(const char *instring)
{
        while(*instring!='\0')
    {
        printf("%c\n",*instring++);
    }
    return;
}

这样会返回每个字母

H
e
l
l
o

W
o
r
l
d

但不是所需的安排。我曾考虑过实现一个do while循环来忽略空格,但是对于在同一行上打印重复的字母,我感到很困惑。另外,如果您想知道为什么我要使用指针,那么我们功课的前一部分就是使用指针算法打印字符串的长度。不知道是否在没有指针的情况下进行修改会更容易。

2 个答案:

答案 0 :(得分:1)

在循环@akryum/vue-cli-plugin-ssr中,您必须具有另一个循环,用于检查当前字符之后的字符。如果字符是空格,则还必须跳过该字符。例如:

vue-apollo/ssr

答案 1 :(得分:1)

您可以拥有一个指向上一个字符的指针,并使用该指针来查找何时打印换行符。此外,您需要在打印当前字符之前检查空格。喜欢:

#include <stdio.h>

void print_string(const char instring[]);

int main(void)
{
    print_string("Hello World");
    return 0;
}

void print_string(const char *instring)
{
    const char *p = NULL;
    while(*instring!='\0')
    {
        if (p != NULL && *instring != *p && *instring != ' ') printf("\n");
        if (*instring != ' ') printf("%c",*instring);
        p = instring++;
    }
    printf("\n");
    return;
}

输出:

H
e
ll
o
W
o
r
l
d