BadWomen 发表于 2019-10-17 16:36:57

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

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号是多少。
{:10_277:}

jackz007 发表于 2019-10-17 16:54:56

#include <stdio.h>
#include <string.h>

int id(const char * s)
{
      int d , k                                        ;
      for(d = 0 ; d < strlen(s) && s != ',' ; d ++) ;
      sscanf(& s , "%d" , & k)                  ;
      return k                                       ;
}

int main(void)
{
      char s                                           ;
      for(;;) {
                printf("\n")                                  ;
                printf("Input string : ")                     ;
                fgets(s , 256 , stdin)                        ;
                s = '\0'                     ;
                if(strlen(s)) printf("the id = %d\n" , id(s)) ;
                else break                                    ;
      }
      printf("\n\n")                                        ;
}

BadWomen 发表于 2019-10-17 17:15:12

jackz007 发表于 2019-10-17 16:54


谢谢 但是好难看不懂

jackz007 发表于 2019-10-17 17:22:03

本帖最后由 jackz007 于 2019-10-17 17:23 编辑

BadWomen 发表于 2019-10-17 17:15
谢谢 但是好难看不懂

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

      ID 是一个整型数,紧挨在字符串第一个逗号之后出现,于是,先定位到这个逗号,然后,从它的后面位置开始,用 sscanf() 函数从字符串中读取一个整型数,它就是我们需要的 ID。

BadWomen 发表于 2019-10-17 17:22:44

jackz007 发表于 2019-10-17 16:54


大佬 请问有没有方法能把 输入的DQF124+IPD,0,7:L-2-$1234字符中 含有+IPD 7:L-2-$的来个字符去掉 我想知道这种方法

jackz007 发表于 2019-10-17 17:24:53

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

      听不懂你的表述,请用实例讲解一下。

jackz007 发表于 2019-10-17 17:28:40

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

      好像明白了,你的意思是字符串只留下 id 把其他成份统统滤除?

BadWomen 发表于 2019-10-17 17:31:28

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

对的 在这串字符中 找到没带+IPD7:L-2-$的字符 也就是ID所表达的字符

jackz007 发表于 2019-10-17 17:41:01

本帖最后由 jackz007 于 2019-10-17 17:43 编辑

BadWomen 发表于 2019-10-17 17:31
对的 在这串字符中 找到没带+IPD7:L-2-$的字符 也就是ID所表达的字符

#include <stdio.h>
#include <string.h>
char * filter(char * s)
{
      int d , k , m                                        ;
      for(d = 0 ; d < strlen(s) && s != ',' ; d ++)   ;
      for(m = d + 1 ; m < strlen(s) && s != ',' ; m ++) ;
      for(k = d + 1 ; k < m ; k ++) s = s;
      s = '\0'                              ;
      return s                                             ;
}

int main(void)
{
      char s                                             ;
      for(;;) {
                printf("\n")                                    ;
                printf("Input string : ")                         ;
                fgets(s , 256 , stdin)                            ;
                s = '\0'                           ;
                if(strlen(s)) printf("the id = %s\n" , filter(s)) ;
                else break                                        ;
      }
      printf("\n\n")                                          ;
}

      你感觉和前面那个方案又有什么区别?

BadWomen 发表于 2019-10-17 18:45:13

jackz007 发表于 2019-10-17 17:41
你感觉和前面那个方案又有什么区别?

两个都可以 只是我看不懂而已 我只是想知道一个简单的代码而已

jackz007 发表于 2019-10-17 20:54:08

BadWomen 发表于 2019-10-17 18:45
两个都可以 只是我看不懂而已 我只是想知道一个简单的代码而已

      难道我写的代码不够简单?你心目中的 “简单” 代码应该长什么样?

BadWomen 发表于 2019-10-18 12:19:41

jackz007 发表于 2019-10-17 20:54
难道我写的代码不够简单?你心目中的 “简单” 代码应该长什么样?

#include <stdio.h>

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

    for (a = 0; raw !='\0';a++) {
      if (raw==','&&raw !='\0' && raw==',') {
            id = raw;
            printf("ID: %c\n", id);
            break;
      }
    }
    return 0;
}

海-啵啵鱼 发表于 2019-10-18 17:41:08

jackz007 发表于 2019-10-17 17:41
你感觉和前面那个方案又有什么区别?

你的代码怎样实现的分号统一右对齐,是用的插件吗?

jackz007 发表于 2019-10-19 21:17:50

海-啵啵鱼 发表于 2019-10-18 17:41
你的代码怎样实现的分号统一右对齐,是用的插件吗?

      纯人工,没办法,强迫症!
页: [1]
查看完整版本: 大一C语言考试题 求助 有会编写的大神么