如何将文本从一个文件复制到另一个文件,然后将文本字符串的第一个字母转换为大写

How to copy text from one file to another and then turning the first letters of the text string into uppercase

本文关键字:文件 文本 第一个 然后 字符串 转换 复制 一个 另一个      更新时间:2023-10-16

我正在尝试构建一个程序,该程序将文本从一个.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;
} 

试试这个,将文件内容带到一个字符串中,然后处理它,然后再次写入 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();
}

而不是一次复制整个文件,您需要将其部分或全部读取到本地"buffer"变量中 - 也许使用 while (getline(in, my_string)) ,然后您可以简单地沿着位置 0 或前面有非字母的string大写字母迭代(您可以使用 std::isalphastd::toupper), 然后将string流式传输到out。 如果您尝试并遇到困难,请将您的新代码附加到问题中,有人一定会帮助您......

我认为

对于此复制,整个文件不会让您对其进行编辑。可以使用 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);
    }
}
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
int main() {
    FILE* fpin;
    FILE* fpout;
    int counter = 0;
    char currentCharacter;
    char previousCharacter=' ';
    fpin = fopen("source.txt", "r"); /* open for reading */
    if (fpin == NULL)
    {
        printf("Fail to open source.txt!n");
        return 1;
    }
    fpout = fopen("target.txt", "w");/* open for writing */
    if (fpout == NULL)
    {
        printf("Fail to open target.txt!n");
        return 1;
    }
    /* read a character from source.txt until END */
    while((currentCharacter = fgetc(fpin)) != EOF)
    {
        /* find first letter of word */
        if(!isalpha(previousCharacter) && previousCharacter != '-' && isalpha(currentCharacter))
        {
            currentCharacter = toupper(currentCharacter); /* lowercase to uppercase */
            counter++; /* count number of words */
        }
        fputc(currentCharacter, fpout); /* put a character to target.txt */
        /* printf("%c",currentCharacter); */
        previousCharacter = currentCharacter; /* reset previous character */
    }
    printf("nNumber of words = %dn", counter);
    fclose(fpin);   /* close source.txt */
    fclose(fpout);  /* close target.txt */
    return 0;
}