首页 > 解决方案 > Kernighan 和 Ritchie - 练习 3.6(带有三个参数的 itoa

问题描述

我正在解决 K&R C 编程书上的练习 3.6:

编写一个接受三个参数而不是两个参数的 itoa 版本。第三个参数是最小字段宽度;如有必要,转换后的数字必须在左侧用空格填充以使其足够宽。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

void reverse1(char s1[]){
  int len=0;
  
  while(s1[len] != '\0'){
    len++;
  }
  int j=0;
  int i=1;
  while( j!= (len)){
    printf("%c",s1[len-i]);
    i++;
    j++;
  }
  printf("\n");
  
}

int itoa2(int n, char s[], int k){
  
  int i, sign;
  unsigned int n2;
  
  if ((sign=n)<0)
    n2=-n;
  else
    n2 = n;
  i=0;
  do
    {
      s[i++] = n2%10 +'0';
     
    } while ((n2/=10)>0);
  if (sign <0)
    s[i++] = '-';
  
  int len=0;
  while(s[len] != '\0'){
    len++;
  }
  if (len>=k){
     s[i] = '\n';
     reverse1(s);
  }
  else {
    int f = k-len;
    
    while (f!=0){
      printf("%c", ' ');
      f=f-1;
    }
    reverse1(s);
  }

}


int main() {
  char s[10000];
  int n = -21;
  
  itoa2(n,s,9);
  
}

在这里,我只是用空格打印缺少的空格。这是否足够或者我应该为此制作一个不同的数组?

标签: ckernighan-and-ritchie

解决方案


推荐阅读