读取文件并以特定格式打印。 C ++

时间:2010-05-14 10:49:34

标签: c++

我必须用C ++编写一个程序,之前我还没有使用过这个laugauge。

我知道如何用Java或C#编写它,但我应该用C ++编写它!

代码应该读取文本文件(我执行此步骤),然后使用数组以特定格式打印输出(我现在不知道如何执行此步骤)

例如: 该文件包含以下内容:

Task          distribution             duration              dependence
A              Normal                  2,10                     -
B              UNIF                    2,7                      A

代码将打印以下内容:

任务A是正态分布,持续时间在2到10之间。它不依赖于任何任务。任务B是统一分发等。


我想提一下,这不是提交给老师的作业或作业,而是我在一个研究项目中工作(在离开大学之前学习一些新东西),他们要求我们使用C ++我发现很难学习(我有其他课程的成绩,我应该考虑而不是做研究)。


我在C#中编写代码并搜索了从C#转换为C ++的实用程序,但它不起作用!

http://www.tangiblesoftwaresolutions.com/Product_Details/Instant_CPlusPlus_CSharp_Edition.html

这是我在C#中的代码,它可以正常工作。

class Program
{
    static List<string []> allTasks = new List<string []>();
    static List<TaskInfo> Tasks = new List<TaskInfo>();

    static void Main(string[] args)
    {
        string line;
        string[] info = null;
        StreamReader sr = new StreamReader("C:\\Users\\7bah Jno0ney\\Documents\\Visual Studio 2008\\Projects\\Example1_C++\\Tasks.txt");
        string fLine = sr.ReadLine();
        while ((line = sr.ReadLine()) != null)
        {
            line = line.Replace("\r", "");
            info = line.Split(' ');
            allTasks.Add(info);
        }
        for (int i = 0; i < allTasks.Count; i++)
        {
            for (int j = 0; j < allTasks[i].Length; j++)
            {
                allTasks[i][j] = allTasks[i][j].Replace("\r", "");
                allTasks[i][j] = allTasks[i][j].Replace("   ", "");
            }
            TaskInfo task = new TaskInfo(allTasks[i][0], allTasks[i][1], allTasks[i][2], allTasks[i][3]);
            Tasks.Add(task);
        }

        Console.WriteLine("You have " + Tasks.Count + " Tasks.");
        Console.WriteLine();
        for (int i = 0; i < Tasks.Count; i++)
        {
            if (Tasks[i].getTaskDep() == null || Tasks[i].getTaskDep() == "-")
            {
                Console.WriteLine("The first task in the project is the task " + Tasks[i].getTaskName() +". " +
                    "The task distribution is " + Tasks[i].getTaskDis() + " and its duration is " + Tasks[i].getTaskDur() + "." + " Finally, it doesn't has any dependence");
                Console.WriteLine();
            }
            else
            {
                string name = Tasks[i].getTaskName();
                string dep = Tasks[i].getTaskDep();
                if(dep.Contains(","))
                {
                    string[] depends = dep.Split(',');
                    Console.Write("Task " + Tasks[i].getTaskName() + " has " + Tasks[i].getTaskDis() + 
                        " distribution and its duration is " + Tasks[i].getTaskDur() + ". ");
                    Console.Write("This task depends on " + depends.Length + " tasks.");
                    for (int d = 0; d < depends.Length; d++)
                    {
                        int num = d + 1;
                        Console.Write(" The " + num + " depended task is " + depends[d] + ". ");
                    }
                    Console.WriteLine();
                    Console.WriteLine();
                }
                else
                {
                    foreach (TaskInfo ti in Tasks)
                    {
                        if((ti.getTaskName() == name) && (ti.getTaskDep() == dep)){
                            Console.WriteLine("This Task is the " + i + 
                                " task and its distribution is " + Tasks[i].getTaskDis() + 
                                ". It is duration is " + Tasks[i].getTaskDur() +
                                " and it depends on the task " + ti.getTaskDep());
                            Console.WriteLine();
                        }
                    }
                }
            }   
        }
    }
}

有哪些实用程序或程序可以帮助转换代码?

2 个答案:

答案 0 :(得分:0)

对于C ++,您应该关注的是使用文件流(最有可能std::ifstream)进行读取,使用标准输出流(std::cout)进行写入。鉴于缺乏细节,我可以告诉你的最好的事情是阅读C ++文件流和流格式。 Here's a tutorial我在网上找到了文件流,here's one for stream formatting

答案 1 :(得分:0)

我建议使用两种路由之一,C ++流或C {名称printf

对于C ++流,请查看I/O Manipulators库,尤其是这些函数:
  setw
  setprecision
  left
  right

对于printf技术,请查看format specifiers
  %d
  %c
  %s

我强烈建议使用空格而不是制表符。控制台没有标准的标签大小。

如果您正在处理GUI,我建议您使用表格小部件或使用字体指标来获得准确的对齐方式。您可以作弊并使用固定间距字体,但正确而费力的方法是计算每个字符的宽度,然后确定所需的间距。或者只是将文本放在固定的水平位置。