Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 逐字符打印字符串,不带空格_C_String_Pointers_Printf - Fatal编程技术网

C 逐字符打印字符串,不带空格

C 逐字符打印字符串,不带空格,c,string,pointers,printf,C,String,Pointers,Printf,在我的家庭作业问题中,我的老师希望我们编写一个程序,在新行上逐字符打印字符串,但忽略空格,在同一行上打印重复字符。例如,逐字符打印“Hello World”将返回 H e ll o W o r l d 我已经能够让我的代码一个字符一个字符地打印一个字符串,但我不能让它在同一行上打印重复项或忽略空格。我看了其他一些类似的问题,似乎这不是一件小事 #include <stdio.h> void print_string(const char instring[]); int mai

在我的家庭作业问题中,我的老师希望我们编写一个程序,在新行上逐字符打印字符串,但忽略空格,在同一行上打印重复字符。例如,逐字符打印“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;
}

但不是在理想的安排。我曾经考虑过实现一个do-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;
}

如果你对每一个角色都做同样的事情,那就行不通了。对于不同的角色,你必须有不同的行为。继续努力!你试图解决这个问题的方法是什么?空间需求微不足道<代码>如果(字符是空格)跳过。对于另一个需求,有多种方法可以实现。您可以在while(thisChar eq lastChar)addToBuffer(thisChar)中设置一个缓冲区
,或者只跟踪指向重复字符开头/结尾的指针并打印该子字符串。谢谢。我没想到会有这么详细的答案。你真的帮了我复制角色的部分。谢谢,你已经澄清了很多。告诉你的老师你得到了帮助,是的,@AjayBrahmakshatriya,你是对的。通常我只在处理家庭作业时提供线索。今天,我觉得写线索比提供几行代码更重要。。。
#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