数字字符串组合倒序
**
题目描述:
对数字,字符,数字串,字符串,以及数字与字符串组合进行倒序排列。
字符范围:由 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 Char[100];
char CharArray[100][20] = {'\0'}; //一定要初始化,不然输出会有垃圾数据
char(*pc)[20];
pc=CharArray;
gets_s(str);
int len =strlen(str);
for(int i=0;i<len;i++){
if(IsValid(p)){
Char[i]=*p;
}
else if(*p=='-' && IsValid(p-1) && IsValid(p+1)){
Char[i]=*p;
}
else{
Char[i]=' ';
}
p++;
}
Char[len]='\0';
int i=0;
int j=0; //行,每行一个合法单词
int k=0; //列,列数代表每个合法单词的字母数
while(Char[i]!='\0'){
if(IsValid(Char+i) || Char[i]=='-'){ //数组名相当于一个指向该数组头的指针
*(*(pc+j)+k)=Char[i];
k++;
}
else {
j++;
k=0;
}
i++;
}
for(int i=j;i>=0;i--){
if(*(*(pc+i))!='\0'){ //遍历行时,若该行为空则跳过
printf("%s ",*(pc+i)); //每一个单词后输出一个空格
}
}
printf("\n");
system("pause");
return 0;
}