校招2019編程題 對數字,字符,數字串,字符串,以及數字與字符串組合進行倒序排列

題目

對數字,字符,數字串,字符串,以及數字與字符串組合進行倒序排列

  1. 字符範圍:由a到z,A到Z,數字範圍:由0到9
  2. 符號”的定義
    (1)”做爲連接符使用時作爲字符串的一部分,例如“20-years”作爲一個整體字符串呈現;
    (2)連續出現2個’及以上時視爲字符串間隔符,如“out–standing"中的“-“視爲間隔符,是2個獨立整體字符串"out"和"standing";
  3. 除了1,2裏面定義的字符以外其他的所有字符,都是非法字符,作爲字符串的間隔符處理,倒序後間隔符作爲空格處理;
  4. 要求倒排後的單詞間隔符以一個空格表示;如果有多個間隔符時,倒排轉換後也只介許出現一個字格間隔符:

輸入示例

I am an 20-years out–standing @ * -stu- dent

輸出示例

dent stu standing out 20-years an am I

代碼

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int isValid(char * p){
    if (*p>='a'&&*p<='z' || *p>='A'&&*p<='Z' || *p>='0'&&*p<='9'){
        return 1;
    }
    else {
        return 0;
    }
}

int main(){
    char str[250];// char * str 會有問題;從標準輸入中讀取字符串,要聲明爲字符數組,不能是一個指向字符的指針
    char * p = str;
    char myChar[100];
    char myCharArray[100][20]={'\0'};
    char (*pc)[20];
    pc = myCharArray;
    gets(str);// scanf("%s",str); scanf 遇到空格字符會停止;gets 可以讀取一行,遇到換行符停止
    // I am an 20-years  out--standing @ * -stu- dent
    // printf("%s\n",str);// 測試是否讀取成功。
    int len = strlen(str);
    for (int i = 0;i<len;i++){
        if (isValid(p)){
            myChar[i] = *p;
        }
        else if (*p=='-' && isValid(p-1)&&isValid(p+1)){
            myChar[i] = *p;
        }
        else{
            myChar[i] = ' ';
        }
        p++;
    }
    myChar[len]='\0';

    // printf("%s\n",myChar);
    int i = 0;
    int j = 0;//行的索引,有幾個單詞
    int k = 0;//列的索引,每個單詞有幾個字符
    while(myChar[i]!='\0'){
        if(isValid(myChar+i) || myChar[i]=='-'){
            *(*(pc+j)+k) = myChar[i];
            k++;
        }
        else{
            j++;
            k = 0;
        }
        i++;
    }
    // for(int i=0;i<15;i++){
    //     printf("%s",*(pc+i));
    // }

    for (int i=j;i>=0;i--){
        if (*(*(pc+i))!='\0'){
            printf("%s ",*(pc+i));
        }
    }
    printf("\n");

    system("pause");
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章