鱼C论坛

 找回密码
 立即注册
查看: 1344|回复: 1

[已解决]S1E29

[复制链接]
匿名鱼油
匿名鱼油  发表于 2021-8-21 09:20:18 |阅读模式

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

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

x
  1. #include <stdio.h>
  2. #include <stdarg.h>
  3. #include <string.h>

  4. int myprintf(char*str,...);
  5. char *myitoa(int num, char *d);
  6. void printStr(char *s);

  7. int main(void)
  8. {
  9.         int i;

  10.         i = myprintf("Hello %s\n", "FishC");
  11.         myprintf("共打印了%d个字符(包含\\n)\n", i);
  12.         i = myprintf("int: %d, char: %c\n", -520, 'H');
  13.         myprintf("共打印了%d个字符(包含\\n)\n", i);

  14.         return 0;
  15. }
  16. char *myitoa(int num, char *d)
  17. {
  18.         int dec = 1;
  19.         int i = 0;
  20.         int temp;

  21.         if (num < 0)
  22.         {
  23.                 d[i++] = '-';
  24.                 putchar('-');
  25.                                 num = -num;
  26.         }

  27.         temp = num;

  28.         while (temp > 9)
  29.         {
  30.                 dec *= 10;
  31.                 temp /= 10;
  32.         }

  33.         while (dec != 0)
  34.         {
  35.                 d[i++] = num / dec + '0';
  36.                 putchar(num / dec + '0');
  37.                 num = num % dec;
  38.                 dec /= 10;
  39.         }

  40.         d[i] = '\0';

  41.         return d;
  42. }
  43. void printStr(char *s)
  44. {
  45.                                         int j;
  46.                                         for(j=0;s[j]!='\0';j++)
  47.                                 {
  48.                                         putchar(s[j]);
  49.                                 }
  50. }

  51. int myprintf(char*str,...)
  52. {
  53.         int i=0,j,count=0;
  54.         int dec=1,temp;
  55.         char *s;
  56.         char *dd;
  57.         char c;
  58.         int d;
  59.         va_list vap;
  60.         va_start(vap,str);
  61.        
  62.         while(str[i]!='\0')
  63.         {
  64.                 if(str[i]=='%')
  65.                 {
  66.                         if(str[i++]=='s')
  67.                         {       
  68.                                 s=va_arg(vap,char*);
  69.                                 printStr(s);
  70.                                 count+=strlen(s);
  71.                         }
  72.                         else if(str[i++]=='c')
  73.                         {
  74.                                         c=va_arg(vap,int);
  75.                                         putchar(c);
  76.                                         count++;
  77.                         }
  78.                         else if(str[i++]=='d')
  79.                         {       
  80.                                 d=va_arg(vap,int);
  81.                                 myitoa(d,dd);
  82.                                 count+=strlen(dd);
  83.                         }
  84.                        
  85.                         i+=2;
  86.                 }
  87.                 else
  88.                 {
  89.                         putchar(str[i]);
  90.                         count++;
  91.                         i++;
  92.                 }
  93.                
  94.         }
  95.         va_end(vap);
  96.         return count;
  97. }
复制代码

纠错
最佳答案
2021-8-21 16:12:31
本帖最后由 jackz007 于 2021-8-21 23:20 编辑
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdarg.h>

  4. int myprintf(char const * str , ...)
  5. {
  6.         int d , i                                                                   ;
  7.         char s[3][256] = {0}                                                        ;
  8.         va_list vap                                                                 ;
  9.         va_start(vap , str)                                                         ;
  10.         strcpy(s[0] , str)                                                          ;
  11.         for(i = 0 ; s[0][i] ; i ++) {
  12.                 if(s[0][i] == '%' && s[0][i + 1] && (s[0][i + 1] == 'c' || s[0][i + 1] == 's' || s[0][i + 1] == 'd')) {
  13.                         if(s[0][i + 1] == 'c' || s[0][i + 1] == 'd') {
  14.                                 d = va_arg(vap , int)                               ;
  15.                                 if(s[0][i + 1] == 'c') sprintf(s[2] , "%c" , d)     ;
  16.                                 else sprintf(s[2] , "%d" , d)                       ;
  17.                         } else if(s[0][i + 1] == 's') {
  18.                                 strcpy(s[2] , va_arg(vap , const char *))           ;
  19.                         }
  20.                         i ++                                                        ;
  21.                 } else {
  22.                         s[2][0] = s[0][i]                                           ;
  23.                         s[2][1] = 0                                                 ;
  24.                 }
  25.                 strcat(s[1] , s[2])                                                 ;
  26.         }
  27.         va_end(vap)                                                                 ;
  28.         printf("%s" , s[1])                                                         ;
  29.         return strlen(s[1])                                                         ;
  30. }

  31. int main(void)
  32. {
  33.         int i                                                                       ;
  34.         i = myprintf("Hello %s\n" , "FishC")                                        ;
  35.         myprintf("共打印了%d个字符(包含\\n)\n", i)                                  ;
  36.         i = myprintf("int: %d, char: %c\n", -520, 'H')                              ;
  37.         myprintf("共打印了%d个字符(包含\\n)\n", i)                                  ;
  38. }
复制代码
回复

使用道具 举报

发表于 2021-8-21 16:12:31 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-8-21 23:20 编辑
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdarg.h>

  4. int myprintf(char const * str , ...)
  5. {
  6.         int d , i                                                                   ;
  7.         char s[3][256] = {0}                                                        ;
  8.         va_list vap                                                                 ;
  9.         va_start(vap , str)                                                         ;
  10.         strcpy(s[0] , str)                                                          ;
  11.         for(i = 0 ; s[0][i] ; i ++) {
  12.                 if(s[0][i] == '%' && s[0][i + 1] && (s[0][i + 1] == 'c' || s[0][i + 1] == 's' || s[0][i + 1] == 'd')) {
  13.                         if(s[0][i + 1] == 'c' || s[0][i + 1] == 'd') {
  14.                                 d = va_arg(vap , int)                               ;
  15.                                 if(s[0][i + 1] == 'c') sprintf(s[2] , "%c" , d)     ;
  16.                                 else sprintf(s[2] , "%d" , d)                       ;
  17.                         } else if(s[0][i + 1] == 's') {
  18.                                 strcpy(s[2] , va_arg(vap , const char *))           ;
  19.                         }
  20.                         i ++                                                        ;
  21.                 } else {
  22.                         s[2][0] = s[0][i]                                           ;
  23.                         s[2][1] = 0                                                 ;
  24.                 }
  25.                 strcat(s[1] , s[2])                                                 ;
  26.         }
  27.         va_end(vap)                                                                 ;
  28.         printf("%s" , s[1])                                                         ;
  29.         return strlen(s[1])                                                         ;
  30. }

  31. int main(void)
  32. {
  33.         int i                                                                       ;
  34.         i = myprintf("Hello %s\n" , "FishC")                                        ;
  35.         myprintf("共打印了%d个字符(包含\\n)\n", i)                                  ;
  36.         i = myprintf("int: %d, char: %c\n", -520, 'H')                              ;
  37.         myprintf("共打印了%d个字符(包含\\n)\n", i)                                  ;
  38. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 20:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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