2010-05-14 47 views
0

我必须用C++编写一个程序,我之前没有使用过这个laugauge。读取文件并以特定格式打印。 C++

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

代码应该读取文本文件(I做到这一步),然后使用阵列打印输出以特定格式(我不现在如何执行此步骤)

例如: 的文件有以下:

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(); 
         } 
        } 
       } 
      } 
     } 
    } 
} 

什么是一些实用程序或程序来帮助转换代码?

+1

你可以发布你的C#代码,然后有人可以帮助你将其转换为C++ – 2010-05-14 10:54:52

+1

通过说“我这一步”你的意思是你有代码写这样做?如果是的话,你可以在你的问题中包含该代码?附:请删除“特定”标签,这没有意义。 – 2010-05-14 11:06:23

回答

0

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

0

我推荐使用C++流的两条路径之一或C名的printf

对于C++流,看看在I/O Manipulators库,尤其是这些功能:
setw
setprecision
left
right

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

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

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

相关问题