文本对齐C语言

时间:2015-06-23 08:43:48

标签: c text alignment

我必须解决涉及左对齐字符串长度和前导零的问题。

我有下表:

  1. BEGIN
  2. CLOSE
  3. CONCATENATE
  4. DELETE
  5. END
  6. INITIALIZE
  7. PRINT
  8. WRITE
  9. 这是由一个简单的程序产生的。 我的问题是找出如何转换它:

    enter image description here

    必须完全一致。

    我必须使用左对齐而不是"标签" (\ t)。 另外,我必须计算字符串长度。到目前为止,我的代码如下:

     int i;
    
     int long temp;
    
     char a = 'a';
    
     char command[][12]= {
    
    "BEGIN", "CLOSE", "CONCATENATE", "DELETE",
    "END" , "INITIALIZE", "PRINT", "WRITE"
    
    };
    
    int main()
    
    {
    
    printf("a/a \tCommand \tLength\n");
    
    for (i=0 ; i<8 ;i++){
    
        temp = strlen(command[i]);
    
        printf("%c. %10s %ld \n",a, command[i], temp);
    
        a++;
    
    }
    
    printf("\n");
    
    return 0;
    
    }
    

    我想在printf中添加一个整数而不是数字(10),但我不知道它是否是正确的解决方案。

    例如:

        printf("%c. %10s %%dld \n",a, command[i], integer,  temp);
    

    感谢任何帮助。 谢谢。

2 个答案:

答案 0 :(得分:2)

来自printf的手册:

  

字段宽度

     

指定可选的十进制数字字符串(具有非零第一位数字)   最小场宽。如果转换后的值包含较少的字符   比字段宽度,它将在左侧填充空格(或   如果已给出左调整标志,则为右)。 而不是   十进制数字字符串可以写&#34; *&#34; 或&#34; * m $&#34; (对于一些小数   整数m)指定字段宽度在下一个中给出   参数,或分别在第m个参数中,必须是类型   INT。   (强调我的)

所以你可以写:

printf("%c. %10s %*ld \n",a, command[i], temp, integer);

答案 1 :(得分:1)

作为如何输出所需内容的示例:

行:

printf("%c. %10s %ld \n",a, command[i], temp);

应写成:

printf("%c. %-10.10s %5.ld \n",a, command[i], temp);

和这一行:

printf("%c. %10s %ld \n",a, command[i], temp);

应写成:

printf("%c. %-10.10s %5.ld \n",a, command[i], temp);

注意左对齐的%s上的' - ',

注意%s上的10.10强制字段始终为10个字符

注意'5'在%d上强制字段始终为5个字符 (右对齐)

对空格以外的填充字符进行其他修改,以抑制前导0抑制等。

您可以在此处查看更多详情:

http://www.tutorialspoint.com/c_standard_library/c_function_printf.htm