簡體   English   中英

逐字符打印字符串,不帶空格

[英]Print a string char by char without spaces

在我的作業問題中,我的老師希望我們編寫一個程序,該程序將在新行上逐個字符地打印字符串,但會忽略空格並在同一行上打印重復的字符。 因此,例如按字符打印“Hello World”字符將返回

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 循環來忽略空格,但至於在同一行上打印重復的字母,我很難過。 另外,如果您想知道我為什么要使用指針,我們作業的前一部分是使用指針算術打印字符串的長度。 不確定在沒有指針的情況下重做它是否會更容易。

在循環while(*instring!='\0')內,您必須有另一個循環來檢查當前字符之后的字符。 如果它是空格,您還必須跳過該字符。 例如:

    while(*instring!='\0') {
        if (isspace(*instring)) {
            instring++;
        } else {
            printf("%c",*instring);
            int i= 1;
            while (*instring == *(instring+i)) {
                printf("%c",*(instring+i));
                i++;
            }
            printf("\n");
            instring += i;
        }
    }

您可以有一個指向前一個字符的指針,並使用它來找出何時打印換行符。 此外,您需要在打印當前字符之前檢查空格。 喜歡:

#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;
}

Output:

H
e
ll
o
W
o
r
l
d

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM