数字字符串组合倒序

数字字符串组合倒序

**

题目描述:

对数字,字符,数字串,字符串,以及数字与字符串组合进行倒序排列。
字符范围:由 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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值