【C語言】編寫一個將輸入複製到輸出的程序,並將其中連續的多個空格用一個空格代替

輸入圖片說明

  • 數組
    • memset清空數組
    • fgets替代gets

fgets的原型是char* fgets(char* s, int n, FILE* fp);參數數量比較多,有3個。而fgets相比於gets有一個顯著的差異就是fgets會將行末的換行符算到讀入的字符串裏面。因此相同且正常(輸入無錯誤,緩衝區夠大)的狀況下,fgets讀入的字符串會比gets在末尾'\0'前面多一個換行符;行長度超出緩衝區大小時只讀入前 n-1 個字符。所以,gets(s);至關於html

fgets(s, sizeof(s), stdin);
if(s[strlen(s) - 1] == '\n') s[strlen(s) - 1] = '\0'; // 去掉換行符數組

其實,末尾這個換行符是另有妙用的。this

#include <stdio.h>
#include<string.h>
int main()
{
    int a,b=0,c=0;
    char line[100],newline[100];
    char temp;
    scanf("%d%c",&a,&temp);
    while(a--)
    {
        fgets(line,sizeof(line), stdin);//if scanf("%s",line); then whitespace can not inputed.
        //printf("%d\n",strlen(line));
        memset(newline,'\0',sizeof(newline));//temporary newline
        int i,j;
        i=0;j=0;
        int isMoreSpace=0;
        for(;i<strlen(line);i++)
        {
            if(line[i]==' ') isMoreSpace++;
            else
            {
                if(isMoreSpace>0)
                {
                    newline[j++]=' ';
                }
                newline[j++]=line[i];
                isMoreSpace=0;
            }
        }
        printf("%s\n",newline);
    }
    return 0;
}
/*input
3
hello kugou
ni  hao  a
ni ni ni  ni
*/
  • getchar

設置兩個變量,分別記錄當前輸入的字符和上一次輸入的字符,「上一個字符」初始化爲EOF。若是當前輸入字符爲空,上一個輸入字符也爲空,則忽略當前輸入的字符。spa

#include <stdio.h>
/*
http://www.cnblogs.com/wuzhenbo/archive/2012/12/02/2798029.html
當前輸入字符能夠分爲兩種狀況:

  一、當前輸入字符不爲空,則直接輸出這個字符便可;

  二、當前輸入字符爲空,這種狀況又能夠分爲兩種狀況:

  ①、上一個輸入字符也爲空,則忽略這次輸入的空格便可;

  ②、上一個輸入字符不爲空,則直接輸出這個字符便可。

 基本思想是:
  設置兩個變量,分別記錄當前輸入的字符和上一次輸入的字符,「上一個字符」初始化爲EOF。
  若是當前輸入字符爲空,上一個輸入字符也爲空,則忽略當前輸入的字符。
*/
int main()
{
    int c, pc;    /* c = character, pr = previous character */

    /* set pc to a value that wouldn't match any character, in case
    this program is over modified to get rid of multiples of other
    characters */
    pc = EOF;
    int a;
    char tmp;
    scanf("%d%c",&a,&tmp);
    while ((a>0)&&(c = getchar()) != EOF)
    {
        if (c == ' ')
            if (pc != c)    /* or if (pc != ' ') */
                putchar(c);
        /* We haven't met 'else' yet, so we have to be a little clumey */
        if (c != ' ')
        {
            if(c=='\n') a--;
            putchar(c);
        }
        pc = c;
    }

    return 0;
}
/*input
3
hello kugou
ni  hao  a
ni ni ni  ni
*/
相關文章
相關標籤/搜索