繁体   English   中英

将输入复制到 output 中,C 中没有不必要的空格

[英]Copying input to output without unnecessary Spaces in C

我正在尝试在 C 中编写一个程序,将其输入复制到它的 output 中,同时用一个空格替换一个或多个空格的每个字符串。 我的代码没有这样做,而是取走每个第二个字符。 这是我的代码:

#include <stdio.h>

main()
{
    int c;
    int lastc;

    lastc = 0;

    while(getchar() != EOF){
        c = getchar();
        if(c == 32 && lastc == 32)
            ;
        else
            putchar(c);
        lastc = c;
    }
}

您的循环应如下所示:

while((c = getchar()) != EOF){
    if(c == 32 && lastc == 32)
        ;
    else
        putchar(c);
    lastc = c;
}

在您的版本中,您在检查 while 循环的条件时使用 getchar 获得一个 char,然后作为下一步,您再次使用 getchar 获得一个 char。 因此,您的代码中未使用第一个。 因此,它正在夺走每个第二个字符。

继续在 while 循环中运行,直到获得非空格字符并在退出后仅打印一个空格。

int main()
{
    int c;
    bool space=false;

    while ((c=getchar()) != EOF) {
        while (isspace(c)) {
            space = true;
            c = getchar();
        }
        if (space) {
            putchar(' ');
            space = false;
        }
        putchar(c);
    }
    return 0;
}

我使用fgets() function 从输入(即标准输入)获取字符串并存储在滚动字符串中。

然后,您必须实现一种分析字符串以在其中查找空格的方法。

当您找到第一个空格时,如果您面对另一个空格,请增加索引。

这是代码。

代码

#include <stdio.h>

int main(void){

    char scroll[100];// = "kang  c    heng    junga";
    fgets(scroll, 100, stdin);
    printf ("Full name: %s\n", scroll);


    int flag = 0;
    int i=0;
    while (scroll[i] != '\0')
    {
        if (scroll[i] == ' ' )
            flag=1;//first space find

        printf("%c",scroll[i]);

        if (flag==0){       
                i++;
        }else {
            while(scroll[i]==' ')
                i++;
            flag=0;     
        }

    }

    return 0;
} 

样本输入Salam be shoma doostane aziz

程序 output : Salam be shoma doostane aziz

[编辑]

使用新字符串st保存已消除空间的字符串,打印为 output。

此代码也适用于波斯字符串。

char scroll[100]={0};// = "kang  c    heng    junga";
printf("Enter a string: ");
fgets(scroll, 100, stdin);

printf ("Original string: %s\n", scroll);

char st[100]={0};

int flag = 0;
int i=0;
int j=0;

while (scroll[i] != '\0')
{
    if (scroll[i] == ' ' )
        flag=1;//first space find

    st[j]=scroll[i];
    j++;    

    if (flag==0){       
            i++;
    }else {
        while(scroll[i]==' ')
            i++;
        flag=0; 
    }

}

printf("Eliminate Spaces: %s", st);

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM