A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fcyan86 中级黑马   /  2013-5-31 17:21  /  1039 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 fcyan86 于 2013-6-1 22:01 编辑

从控件台输出一个弓形,行数不定,列数不定,我代码是这样的,有没有更加简单的
  1. #region//
  2.             //一行30个,弓形,行距两行
  3.             string tempStr = str;//不定长度的字符串,将该字符串按弓形输出
  4.             StringBuilder outStr=new StringBuilder();//最后要从控制台输出的字符串
  5.             int index = 0;//字符串索引
  6.             int row = 0;//行索引
  7.             string spaces = "";//空格
  8.             for (int j = 0; j < 30-1; j++)
  9.             {
  10.                 spaces += " ";
  11.             }
  12.             bool leftToRight = true;
  13.             int rowLength = 0;
  14.             do
  15.             {
  16.                 rowLength = tempStr.Length - index > 30 ? 30 : tempStr.Length - index;
  17.                 if (row%3 == 0 && leftToRight)
  18.                 {
  19.                     //从左到右
  20.                     outStr.Append(tempStr.Substring(index, rowLength));
  21.                     index += 30;
  22.                     leftToRight = false;
  23.                 }
  24.                 else if(row%3==0)
  25.                 {
  26.                     //从右到左
  27.                     string tempRowStr = tempStr.Substring(index, rowLength);
  28.                     Stack<char> stack=new Stack<char>();
  29.                     for (int k = 0; k < 30;k++ )
  30.                     {
  31.                         if(k<tempRowStr.Length)
  32.                             stack.Push(tempRowStr[k]);
  33.                         else
  34.                         {
  35.                             stack.Push(' ');
  36.                         }
  37.                     }
  38.                     char[] tempChars = new char[30];
  39.                     for (int k = 0; k <30; k++)
  40.                     {
  41.                         tempChars[k] = stack.Pop();
  42.                     }
  43.                     outStr.Append(new string(tempChars));
  44.                     index += 30;
  45.                     leftToRight = true;
  46.                 }
  47.                 else if (leftToRight)
  48.                 {
  49.                     //左边从上到下
  50.                     outStr.Append(tempStr.Substring(index, 1) + spaces);
  51.                     index++;
  52.                 }
  53.                 else
  54.                 {
  55.                     //右边从上到下
  56.                     outStr.Append(spaces + tempStr.Substring(index, 1));
  57.                     index++;
  58.                 }
  59.                 row++;
  60.                 outStr.Append("\n");
  61.                 if(index>tempStr.Length)
  62.                     break;

  63.             } while (true);
  64.             #endregion
复制代码

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

1 个回复

倒序浏览
……自已结贴………………
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马