导航
  • 主页
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm
  • WPF
  • 问答

大一作业求解答

stubid_boy 2020-11-04 12:34:16

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 古风排版
{
class Program
{
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
string str = Console.ReadLine();
int a = str.Length;
char[] arr = str.ToCharArray();
int x, y;
x = a % n;//最后一行字符数
y = (a - x) / n;//列数-1
char[,] ar = new char[n, y + 1];
for (int i = 0; i < a; i++)
{
ar[i % n, y - (i - i % n) / n] = arr[i];
}
if (x != 0)
{
for (int k = x; k < n; k++)
{
ar[k, 0] = ' ';
}
}
for (int k = 0; k < n; k++ )
{
for (int m = 0; m <= y; m++)
{
Console.Write(ar[k, m]);
}
Console.Write("\n");
}
Console.ReadLine();
}
}
}

网上找到的只有c语言答案,但我们还没学。
求大佬帮忙看看我这错在哪怎么改,或者给个其他的解法,谢谢!!!
...全文
8958 1 收藏 9
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
泡泡鱼_ 2020-11-04
突然想看下效果,整了篇《出师表》,标点符号用全角的替换过,字符加多了2个空白占位符以作间距 方法:

private static List<string> classicalChinese(int len, string text)
        {
            //按每组长度为len,将其分割成一个数组
            string patten = "[\\s\\S]{" + len + "}|[\\s\\S]{1," + len + "}";
            Regex rex = new Regex(patten, RegexOptions.IgnoreCase);
            //分割
            List<string> groups = new List<string>(rex.Matches(text).Cast<Match>().Select(m => m.Value).ToArray());
            //反转:ase ,st c,a te, is ,This
            groups.Reverse();

            List<string> result = new List<string>();
            List<List<string>> results = new List<List<string>>(len);
            for (int i = 0; i < len; i++)
            {
                results.Add(new List<string>());
            }
            //组合:["asa t","st ih","e tsi"," ce s"]
            for (int i = 0; i < groups.Count; i++)
            {
                //这里,包括后面,有将常规的空格转换成了一个空白占位符。只是为了观看效果
                char[] arr_Groups = groups[i].Replace(" ", " ").ToCharArray();
                for (int j = 0; j < len; j++)
                {
                    //加多了两个空白占位符以作间距
                    results[j].Add(arr_Groups.Length < j + 1 ? "   " : "  " + arr_Groups[j].ToString());
                }
            }
            //只是为了更直观,将每组字符进行拼接
            foreach (List<string> temp in results)
            {
                result.Add(string.Join("", temp.ToArray()));
            }
            
            return result;
        }
调用:我是webApi中加的方法,所以加的是<br/>换行符,以便于直接观看

string text = "先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。"
                + "宫中府中,俱为一体;陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理;不宜偏私,使内外异法也。"
                + "侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下:愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。"
                + "将军向宠,性行淑均,晓畅军事,试用于昔日,先帝称之曰“能”,是以众议举宠为督:愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。"
                + "亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之、信之,则汉室之隆,可计日而待也。"
                + "臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间:尔来二十有一年矣。"
                + "先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐托付不效,以伤先帝之明;故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。"
                + "愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏。臣不胜受恩感激。"
                + "今当远离,临表涕零,不知所言。";
            Stopwatch sw = new Stopwatch();
            sw.Start();
            List<string> list = classicalChinese(20, text);
            sw.Stop();
            return string.Format("耗时:{0}ms", sw.Elapsed.TotalMilliseconds) + "<br/>" + string.Join("<br/>", list.ToArray());
效果:真的有看文言文的感觉呀。哈哈
回复
Dear200892 2020-11-04
https://www.cnblogs.com/damonlan/archive/2011/06/04/2072743.html
回复
泡泡鱼_ 2020-11-04

private static List<string> test(int len, string text)
        {
            //按每组长度为len,将其分割成一个数组
            string patten = "[\\s\\S]{" + len + "}|[\\s\\S]{1," + len + "}";
            Regex rex = new Regex(patten, RegexOptions.IgnoreCase);
            //分割
            List<string> groups = new List<string>(rex.Matches(text).Cast<Match>().Select(m => m.Value).ToArray());
            //反转:ase ,st c,a te, is ,This
            groups.Reverse();

            List<string> result = new List<string>();
            List<List<string>> results = new List<List<string>>(len);
            for (int i = 0; i < len; i++)
            {
                results.Add(new List<string>());
            }
            //组合:["asa t","st ih","e tsi"," ce s"]
            for (int i = 0; i < groups.Count; i++)
            {
                //这里,包括后面,有将常规的空格转换成了一个空白占位符。只是为了观看效果
                char[] arr_Groups = groups[i].Replace(" ", " ").ToCharArray();
                for (int j = 0; j < len; j++)
                {
                    results[j].Add(arr_Groups.Length < j + 1 ? " " : arr_Groups[j].ToString());
                }
            }
            //只是为了更直观,将每组字符进行拼接
            foreach (List<string> temp in results)
            {
                result.Add(string.Join("", temp.ToArray()));
            }
            
            return result;
        }
string text = "本片为英剧军情五处电影版,也是这一系列剧的大结局。当一个恐怖分子在一次常规交接中逃脱,克莱姆必须与军情五处遭贬低的情报长官合作,在即将到来的伦敦恐怖袭击之前追踪到恐怖分子。";
List<string> list = test(4, text);
return string.Join("<br/>", list.ToArray());
回复
yijigu2 2020-11-04
引用 6 楼 yijigu2 的回复:
这个从右到左,竖向排列 其实就是矩阵右旋转一下 太久没看c/c++;按这个思路重排下就好了 1 2 3 4 9 5 1 5 6 7 8=>10 6 2 9 10 7 3 8 4
输入的行 变成 列 列变成行
回复
yijigu2 2020-11-04
这个从右到左,竖向排列 其实就是矩阵右旋转一下 太久没看c/c++;按这个思路重排下就好了 1 2 3 4 9 5 1 5 6 7 8=>10 6 2 9 10 7 3 8 4
回复
yijigu2 2020-11-04

#include <iostream>
using namespace std;
int main()
{
string chars;

int row=0;//行
int col=0;//列



cin>>row;
cout<<"输入行数!"<<endl;
while(row>100)
{
    cin>>row;
}
cout<<"输入列数!"<<endl;
cin>>col;
while(col>1000)
{
    cin>>col;
}

cout<<"输入字符串!"<<endl;
cin>>chars;
int i=0;
string chartemp;


while(i<chars.length)
{
     //
}



}
回复
学无涯止 2020-11-04
public void shupai(){ int rowLen = 7; String str = "this is a test program"; int arrFirstLen = str.length()/rowLen+1; int lastRowLen = str.length()%rowLen; String [][] arr = new String[arrFirstLen][rowLen]; int j = arrFirstLen-1; int jk = 0; for(String word:str.split("")){ arr[j][jk] = word; if(jk==rowLen-1){ jk =0; j--; continue; } jk++; } for(;lastRowLen<rowLen;lastRowLen++){ arr[0][lastRowLen]=" "; } for(int x =0;x<rowLen;x++){ for(int y =0;y<arrFirstLen;y++) { System.out.print(arr[y][x]); } System.out.println(""); } }
回复
stubid_boy 2020-11-04
引用 1 楼 Dear200892的回复:
https://www.cnblogs.com/damonlan/archive/2011/06/04/2072743.html
题型不一样啊。那个古诗可以用split直接分成几个字符串,我这个想尝试用二维数组输出
回复
stubid_boy 2020-11-04
题型不一样啊。那个古诗可以用split直接分成几个字符串,我这个想尝试用二维数组输出
回复
发动态
发帖子
C#
创建于2007-09-28

10.4w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.