鱼C论坛

 找回密码
 立即注册
查看: 2808|回复: 13

大一C语言考试题 求助 有会编写的大神么

[复制链接]
发表于 2019-10-17 16:36:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.有一固定格式的字符串”+IPD,ID号,7:L-2-$ ”(双引号以内的为固定格式的字符串)。
字符串1 ”DQF124+IPD,0,7:L-2-$1234”
字符串2 ”He!#+IPD,3,7:L-2-$071231fg”
字符串3 ” Wo2019107$+IPD,5,7:L-2-$420”
请写一个函数,要求输入上述3个字符串都可以找到每个字符串里对应的ID号是多少。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-10-17 16:54:56 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <string.h>

  3. int id(const char * s)
  4. {
  5.         int d , k                                        ;
  6.         for(d = 0 ; d < strlen(s) && s[d] != ',' ; d ++) ;
  7.         sscanf(& s[d + 1] , "%d" , & k)                  ;
  8.         return k                                         ;
  9. }

  10. int main(void)
  11. {
  12.         char s[256]                                           ;
  13.         for(;;) {
  14.                 printf("\n")                                  ;
  15.                 printf("Input string : ")                     ;
  16.                 fgets(s , 256 , stdin)                        ;
  17.                 s[strlen(s) - 1] = '\0'                       ;
  18.                 if(strlen(s)) printf("the id = %d\n" , id(s)) ;
  19.                 else break                                    ;
  20.         }
  21.         printf("\n\n")                                        ;
  22. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2019-10-17 17:15:12 | 显示全部楼层

谢谢 但是好难看不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-17 17:22:03 | 显示全部楼层
本帖最后由 jackz007 于 2019-10-17 17:23 编辑
BadWomen 发表于 2019-10-17 17:15
谢谢 但是好难看不懂


      只要抓住要点,一切都很简单,就像我的代码。

      ID 是一个整型数,紧挨在字符串第一个逗号之后出现,于是,先定位到这个逗号,然后,从它的后面位置开始,用 sscanf() 函数从字符串中读取一个整型数,它就是我们需要的 ID。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-17 17:22:44 | 显示全部楼层

大佬 请问有没有方法能把 输入的DQF124+IPD,0,7:L-2-$1234字符中 含有+IPD 7:L-2-$的来个字符去掉 我想知道这种方法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-17 17:24:53 | 显示全部楼层
BadWomen 发表于 2019-10-17 17:22
大佬 请问有没有方法能把 输入的DQF124+IPD,0,7:L-2-$1234字符中 含有+IPD 7:L-2-$的来个字符去掉 我想知 ...


      听不懂你的表述,请用实例讲解一下。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-17 17:28:40 | 显示全部楼层
BadWomen 发表于 2019-10-17 17:22
大佬 请问有没有方法能把 输入的DQF124+IPD,0,7:L-2-$1234字符中 含有+IPD 7:L-2-$的来个字符去掉 我想知 ...

      好像明白了,你的意思是字符串只留下 id 把其他成份统统滤除?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-17 17:31:28 | 显示全部楼层
jackz007 发表于 2019-10-17 17:28
好像明白了,你的意思是字符串只留下 id 把其他成份统统滤除?

对的 在这串字符中 找到没带+IPD  7:L-2-$的字符 也就是ID所表达的字符
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-17 17:41:01 | 显示全部楼层
本帖最后由 jackz007 于 2019-10-17 17:43 编辑
BadWomen 发表于 2019-10-17 17:31
对的 在这串字符中 找到没带+IPD  7:L-2-$的字符 也就是ID所表达的字符

  1. #include <stdio.h>
  2. #include <string.h>
  3. char * filter(char * s)
  4. {
  5.         int d , k , m                                        ;
  6.         for(d = 0 ; d < strlen(s) && s[d] != ',' ; d ++)     ;
  7.         for(m = d + 1 ; m < strlen(s) && s[m] != ',' ; m ++) ;
  8.         for(k = d + 1 ; k < m ; k ++) s[k - (d + 1)] = s[k]  ;
  9.         s[m - (d + 1)] = '\0'                                ;
  10.         return s                                             ;
  11. }

  12. int main(void)
  13. {
  14.         char s[256]                                               ;
  15.         for(;;) {
  16.                 printf("\n")                                      ;
  17.                 printf("Input string : ")                         ;
  18.                 fgets(s , 256 , stdin)                            ;
  19.                 s[strlen(s) - 1] = '\0'                           ;
  20.                 if(strlen(s)) printf("the id = %s\n" , filter(s)) ;
  21.                 else break                                        ;
  22.         }
  23.         printf("\n\n")                                            ;
  24. }
复制代码


      你感觉和前面那个方案又有什么区别?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-17 18:45:13 | 显示全部楼层
jackz007 发表于 2019-10-17 17:41
你感觉和前面那个方案又有什么区别?

两个都可以 只是我看不懂而已 我只是想知道一个简单的代码而已
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-17 20:54:08 From FishC Mobile | 显示全部楼层
BadWomen 发表于 2019-10-17 18:45
两个都可以 只是我看不懂而已 我只是想知道一个简单的代码而已

      难道我写的代码不够简单?你心目中的 “简单” 代码应该长什么样?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-18 12:19:41 | 显示全部楼层
jackz007 发表于 2019-10-17 20:54
难道我写的代码不够简单?你心目中的 “简单” 代码应该长什么样?

#include <stdio.h>

int main() {
    int a;
    printf("INPUT:");
    char raw[256] , id;
    scanf("%s" , raw);

    for (a = 0; raw[a] !='\0';a++) {
        if (raw[a]==','&&raw[a + 1] !='\0' && raw[a + 2]==',') {
            id = raw[a+1];
            printf("ID: %c\n", id);
            break;
        }
    }
    return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-18 17:41:08 | 显示全部楼层
jackz007 发表于 2019-10-17 17:41
你感觉和前面那个方案又有什么区别?

你的代码怎样实现的分号统一右对齐,是用的插件吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-10-19 21:17:50 From FishC Mobile | 显示全部楼层
海-啵啵鱼 发表于 2019-10-18 17:41
你的代码怎样实现的分号统一右对齐,是用的插件吗?

      纯人工,没办法,强迫症!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-7 01:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表