| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 641 人关注过本帖
标题:大神帮我做个题 用C语言
只看楼主 加入收藏
zhaoxu1990
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-7-9
结帖率:33.33%
收藏
已结贴  问题点数:20 回复次数:9 
大神帮我做个题 用C语言
将 电话号码 one two 。。。nine zero
翻译成1  2  、、、 9 0  
中间会有double  
例如输入:OneTwoThree 输出:123
输入:OneTwoDoubleTwo 输出:1222
输入:1Two2 输出:ERROR
输入:DoubleDoubleTwo 输出:ERROR
第三题:有空格,非法字符,两个Double相连,Double位于最后一个单词都错误
搜索更多相关主题的帖子: double C语言 单词 电话 
2014-12-18 20:20
zhaoxu1990
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-7-9
收藏
得分:0 
两个Double相连那个错误实现不了啊
2014-12-18 20:30
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
不知道你这个DOUBLE是神马意思

DO IT YOURSELF !
2014-12-19 10:34
wyw19880809
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:178
专家分:738
注 册:2013-3-14
收藏
得分:5 
直接通过strcmp来识别里面的英文单词,识别出来了后就把指针移动下一个单词起始位置继续识别,直到识别完成,只要有一个不能识别就报错,最后再判断double的位置是否合适
2014-12-19 10:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:5 
以下是引用wyw19880809在2014-12-19 10:54:28的发言:

直接通过strcmp来识别里面的英文单词,识别出来了后就把指针移动下一个单词起始位置继续识别,直到识别完成,只要有一个不能识别就报错,最后再判断double的位置是否合适

你用这个方案试试?

授人以渔,不授人以鱼。
2014-12-19 10:56
zhaoxu1990
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2014-7-9
收藏
得分:0 
回复 5楼 TonyDeng
  好的
2014-12-19 19:22
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用zhaoxu1990在2014-12-19 19:22:44的发言:

  好的

注意:直接用strcmp()比较是不行的,你必须想个变通办法。

授人以渔,不授人以鱼。
2014-12-19 19:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
Double2,是22,Double3,是33,口語中常見。

授人以渔,不授人以鱼。
2014-12-19 21:03
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
其实1Two2并不能说错,不过约定罢了,这些对错示例,必须详细无遗漏地确定好,才能写程序。

授人以渔,不授人以鱼。
2014-12-19 21:05
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:5 
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int checkStr(char *);
int splitWord(char *);
void cmpWord(char *);

char phoneWord[20][7];

int main(void) {
    int i = 0, cur = 0;
    char *phoneStr = malloc(140 * sizeof(char));

    if(phoneStr != NULL) {
        printf("INPUT...\n");
        fgets(phoneStr, 100, stdin);

        if(checkStr(phoneStr) == 1) {
            cur = splitWord(phoneStr);

            if(strcmp(phoneWord[cur - 1], "Double") == 0) {
                printf("ERROR 输入字符串最后一个单词不能为Double\n");
                goto OUT;
            }

            for(i = 0; i < cur; i++) {
                if(strcmp(phoneWord[i], "Double") == 0
                        && strcmp(phoneWord[i + 1], "Double") == 0) {
                    printf("ERROR 输入字符串中不能有连续的Double\n");
                    goto OUT;
                }
            }

            for(i = 0; i < cur; i++) {
                if(0 == strcmp(phoneWord[i], "Double")) {
                    strcpy(phoneWord[i], phoneWord[i + 1]);
                }

                cmpWord(phoneWord[i]);
            }

        } else {
            printf("ERROR 输入字符串合法检测未通过\n");
        }

    } else {
        printf("内存分配错误\n");
        exit(1);
    }

OUT:
    free(phoneStr);
    printf("\n");
    return 0;
}

int checkStr(char *p) {
    int i = 0, flag = -1, LEN = strlen(p) - 1;

    if((*p < 'A') || (*p > 'Z') ||
            *(p + LEN - 1) < 'a' || *(p + LEN - 1) > 'z') {
        flag = 0;
    }

    for(i = 0; i < LEN; i++) {
        if(*(p + i) == ' ') {
            flag = 0;
            break;

        } else if((*(p + i) < 'A') || *(p + i) > 'z' ||
                  (*(p + i) > 'Z' && *(p + i) < 'a')) {
            flag = 0;
            break;

        } else {
            flag = 1;
        }
    }

    return flag;
}

int splitWord(char *p) {
    int i = 0, j = 0, k = 0, cur = 0, LEN = strlen(p) - 1;

    for(i = 0; i < LEN - 2; i++) {
        if(*(p + i) >= 'A' && *(p + i) <= 'Z') {
            cur++;
        }
    }

    for(i = 0, j = 0; j < cur; j++) {
        for(k = 0; k < 7; i++, k++) {
            if(0 == k) {
                phoneWord[j][0] = *(p + i);

            } else if(*(p + i) >= 'a' && *(p + i) <= 'z') {
                phoneWord[j][k] = *(p + i);

            } else {
                break;
            }
        }
    }

    return cur;
}


void cmpWord(char *p) {
    int i;
    char cmp[10][7] = {"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};

    for(i = 0; i < 10; i++) {
        if(0 == strcmp(cmp[i], p)) {
            printf("%d", i);
        }
    }
}


[ 本帖最后由 longwu9t 于 2014-12-20 09:50 编辑 ]

Only the Code Tells the Truth             K.I.S.S
2014-12-20 09:45
快速回复:大神帮我做个题 用C语言
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018985 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved