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