校招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;
}
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值