2015-04-23 45 views
-1

我试图构建一个程序,将文本从一个.txt文件复制到另一个文件,然后将每个单词的第一个字母在文本中并将其切换为大写字母。到目前为止,我只设法在大写部分上复制了没有运气或想法的文本。任何提示或帮助将不胜感激。这是我到目前为止有:如何将文本从一个文件复制到另一个文件,然后将文本字符串的第一个字母转换为大写

int main() 
{ 
    std::ifstream fin("source.txt"); 
    std::ofstream fout("target.txt"); 
    fout<<fin.rdbuf(); //sends the text string to the file "target.txt" 

    system("pause"); 
    return 0; 
} 
+0

您的意思是大写每个句子或单词的第一个字母?将它以点,空格或适当的方式拆分为列表或向量,然后将每个元素的首字母大写。 – Puchatek

回答

0

而不是一次拷贝整个文件的,你需要阅读的部分或全部成当地的“缓冲”变量 - 也许使用while (getline(in, my_string)),那么你就可以只需沿着string迭代字母大写,这些字母在位置0或前面有一个非字母(可以使用std::isalphastd::toupper),然后将string流式传输到out。如果你有一个去那里,并卡住了,追加你的新代码的问题,并有人一定会帮助你....

0

我认为这个复制整个文件是不会让你编辑它。您可以使用get()put()一次处理文件一个字符。然后找出如何检测字的开始并使其大写:

事情是这样的:

int main() 
{ 
    std::ifstream fin("source.txt"); 
    std::ofstream fout("target.txt"); 

    char c; 
    while(fin.get(c)) 
    { 
     // figure out which chars are the start 
     // of words (previous char was a space) 
     // and then use std::toupper(c) 
     fout.put(c); 
    } 
} 
+0

我会尝试。谢谢,@Galik! – Rdhot

0

试试这个,就拿文件内容为一个字符串,然后对其进行处理,并再次写入该traget文件。

int main() 
{ 
    std::ifstream fin("source.txt"); 
    std::ofstream fout("target.txt"); 
    // get pointer to associated buffer object 
    std::filebuf* pbuf = fin.rdbuf(); 
    // get file size using buffer's members 
    std::size_t size = pbuf->pubseekoff (0,fin.end,fin.in); 
    pbuf->pubseekpos (0,fin.in); 
    // allocate memory to contain file data 
    char* buffer=new char[size]; 
    // get file data 
    pbuf->sgetn (buffer,size); 
    fin.close(); 
    locale loc; 
    string fileBuffer = buffer; 
    stringstream ss; 
    for (std::string::size_type i=0; i<fileBuffer.length(); ++i){ 
    if(i==0) 
     ss << toupper(fileBuffer[i],loc); 
    else if (isspace(c)) 
     ss << fileBuffer[i] << toupper(fileBuffer[++i],loc); 
    else 
     ss << fileBuffer[i]; 
    } 

    string outString = ss.str(); 

    fout << outString; 
    fout.close(); 

} 
相关问题