在C ++中以格式输出

时间:2014-03-18 01:52:51

标签: c++

我有一个文本文件template.txt:


要:

| 1 | | 2 | | 3 |

| 4 |

| 5 |,| 6 | | 7 |

亲爱的| 1 | | 3 |: 你和| 3 |在C ++编程竞赛中,家庭可能是$ 1,000,000的幸运赢家!.....


我有一个文本文件database.txt:


先生|哈里|摩根| 1105 Main st |旧金山|加利福尼亚州| 95014 |

Dr. | John | Lee | 702 Ninth St Apt 4 | San Jose | CA | 95109 |

Miss | Evelyn | Garcia | 100 University Place | Ann Arbor | MI | 48105 |


我的代码可以正确显示database.txt中的第一行格式。

我在last.txt中的输出(由我自己创建):

要: 哈里摩根先生 1105 Main st 旧金山,加利福尼亚州95014 亲爱的摩根先生: 您和摩根家族可能是C ++编程竞赛中$ 1,000,000的幸运赢家!.....

我想在last.txt中将下两行显示为相同的格式。 我使用while循环,甚至创建一个新函数,它根本不起作用。 希望可以有人帮帮我!谢谢!

#include<iostream>
#include<fstream>
#include<string>
#include <cstdlib>
using namespace std;


void edit(ifstream& data, ifstream& temp, ofstream& last)
{
    char x;
    char x2, x3;
    string arr[21];
    string line;


    for (int j = 1; j<21; j++)
    {
        getline(data, line, '|');
        arr[j] = line;
        cout << arr[j] << endl;
    }

    while (temp.get(x))
    {
        if ('|' == x)
        {
            temp.get(x2);
            if (isdigit(x2))
            {
                temp.get(x3);
                if ('|' == x3)
                {
                    int n = x2 - '0';
                    //n+=7;
                    last << arr[n];
                }
                else
                    temp.putback(x3);
            }
            else
                temp.putback(x2);
        }
        else
            last << x;
    }
}

int main()
{
    ofstream last;
    ifstream temp;
    ifstream data;
    temp.open("template.txt");
    data.open("database.txt");
    last.open("last.txt", fstream::app);
    if (data.fail()) { return 0; }


    edit(data, temp, last);


    system("pause");
}

1 个答案:

答案 0 :(得分:0)

在处理名称文件中的一行后,您可以使用seekg重新定位到模板文件的开头。您需要重新构建代码以获得两个循环。