1. 程式人生 > >ACM小練習之字串的處理

ACM小練習之字串的處理

題目描述:

輸入一行字串,要求按下三個條件處理:

①.若連續多個空格則都縮減為一個。

②.每個單詞第一個字母均大寫。

③.數字與字母相連時加下劃線(_)。

思路:       

做這道題,先要選能讀取空格的輸入流,顯然cin不可以,C++的getline和C的gets都可以用,

然後我先把字串放在一個字元陣列中,再用for迴圈一個一個呼叫,

每讀取一個字元時,都要看看之前讀取的字元是空格,數字還是字母,

然後再根據不同情況,將不同字元存到輸出的字元陣列中,

最後輸出  輸出的字元陣列  即可。

原始碼:

#include <iostream>
#include <stdio.h>              // 用到gets函式,需要用這個

using namespace std;

int main()
{
    char a[1000],b[1000];       //設定兩個字串陣列,一個用來存輸入的,另一個用來存輸出的。
    int i,j;
    bool kg,zm,sz;              //讀取的變數 空格,字母,數字
//  gets(a);                    //讀取所輸入的字串:gets,getline  均可,用gets需要stdio標頭檔案
    cin.getline(a,1000);        // PS:getline 用法:  cin.getline(char a,int b,char c)
                                //    :a為所需存進的字元陣列,b為讀取的個數,c為讀到某個字元就停止,如果不填c,就預設讀到回車。

    j=0;
    kg=false,zm=false,sz=false; //剛開始均設定為false
    for(i=0;a[i]!='\0';i++)     //開始讀取字元
    {
        if(a[i]==' ')           //如果讀取的是空格,判斷之前的讀取是否為空格
        {
            if(kg==1)
                continue;
            else if(kg==0)
            {
                b[j]=' ';
                j++;
                kg=1;
            }
            sz=0;
            zm=0;
        }
        else if(a[i]>='0'&&a[i]<='9')     // 如果讀取的為數字
        {
            if(zm==1)
            {
                b[j]='_';
                b[++j]=a[i];
                j++;
                zm=0;
                sz=1;
            }
            else
            {
                b[j]=a[i];
                j++;
                sz=1;
            }
            kg=0;
            zm=0;
        }
        else if(a[i]>='a'&&a[i]<='z')       //如果讀取的為字母
        {
            if(i==0)
            {
                b[j]=char(a[i]-32);
                j++;
                zm=1;
                continue;

            }

            if(kg==1)
            {
                b[j]=char(a[i]-32);
                j++;
                kg=0;
                sz=0;
                zm=1;
                continue;
            }


            if(sz==1)
            {
                b[j]='_';
                b[++j]=a[i];
                j++;
                sz=0;
                zm=1;
            }
            else
            {
                b[j]=a[i];
                j++;
                zm=1;
            }
            kg=0;
            sz=0;
        }
    }
    b[j]='\0';                    // 結束字串
    cout<<b<<endl;
    return 0;
}

執行效果圖: