将所有仅包含一个单词的字符串从文件 F1 复制到文件 F2

Copy from file F1 to file F2 all strings which containing only one word

提问人:Olafus 提问时间:11/14/2019 最后编辑:Remy LebeauOlafus 更新时间:11/14/2019 访问量:215

问:

我创建了一个文件,其中我用键盘填充字符串,我的任务是从我的第一个文件(F1)复制到第二个文件(F2)所有只包含一个单词的字符串。

#include <iostream>
#include <fstream>
#include <clocale>
#include <cstdlib>
#include <cstring>
using namespace std;

int main()
{ 
    int i,n;
    char buff[255];
    ofstream fout("F1.txt");   // open file for filling

    cout << "Enter number of strings ";
    cin >> n;
    cin.ignore(4096,'\n');
    for(i=0;i<n;++i)
    {
        cout << "[" << i+1 << "-string]" << ":";
        cin.getline(buff,255);      // write strings from keyboard
        fout << buff << "\n";      // fill the file with all strings
    }
    fout.close();    /close file
    const int len = 30;
    int strings = n;
    char mass[len][strings];  // creating two-dimensional array as buffer while reading
    const char ch = '\n';
    ifstream fin("F1.txt");    //open file for reading
    if (!fin.is_open()) 
        cout << "File can not be open\n";    //checking for opening
    else
    {
        for(int r = 0; r<strings; r++)
        {
            fin.getline(mass[r], len-1,ch); 
            cout << "String " << r+1 << " = "<< mass[r] << endl; // output strings from file(buffer)
        }
    }
    return 0;
}

image

C++ 数组字符串 文件 IOSTREAM

评论

1赞 Remy Lebeau 11/14/2019
你的实际问题是什么?另外,作为替代品会更好。并且不合法,因为在编译时不知道的值,可变长度数组是某些编译器中的非标准扩展,请改用。char buff[255];std::stringchar mass[len][strings]stringsstd::vector
0赞 Olafus 11/14/2019
将仅包含一个单词的所有字符串从文件 F1 复制到文件 F2。
2赞 Remy Lebeau 11/14/2019
这不是一个问题,这是一个目标。你的问题是什么?你到底遇到了什么问题?请更具体一些。您想要将行复制到第二个文件,但此代码中没有尝试这样做。而且这段代码比完成如此简单的任务所需的要复杂得多。
0赞 Kevin 11/14/2019
欢迎来到 Stackoverflow!那么具体是什么不起作用呢?
0赞 Olafus 11/14/2019
如何检查每行是否只包含一个单词?

答:

0赞 ameermuhammed 11/14/2019 #1
  1. 修剪字符串(函数删除字符串开头和结尾的空格)
  2. 现在搜索字符串中的空格:
    • 如果找到:则有多个单词
    • 否则:它是一个单字字符串
#include <iostream>
#include <fstream>
#include <clocale>
#include <cstdlib>
#include <cstring>
using namespace std;
std::string trim(const std::string &s)
{
    std::string::const_iterator it = s.begin();
    while (it != s.end() && isspace(*it))
        it++;

    std::string::const_reverse_iterator rit = s.rbegin();
    while (rit.base() != it && isspace(*rit))
        rit++;

    return std::string(it, rit.base());
}
int main()
{ 
    int i,n;
    char buff[255];
    ofstream fout("F1.txt");   

    cout << "Enter number of strings ";
    cin >> n;
    cin.ignore(4096,'\n');
    for(i=0;i<n;++i)
    {
        cout << "[" << i+1 << "-string]" << ":";
        cin.getline(buff,255);      
        fout << buff << "\n";      
    }
    fout.close();    
    const int len = 30;
    int strings = n,flag=0;
    char mass[len][strings];  
    const char ch = '\n';
    ifstream fin("F1.txt");    
    if (!fin.is_open()) 
        cout << "File can not be open\n";  
    else
    {   ofstream f2out("F2.txt");     
        for(int r = 0; r<strings; r++)
        {   flag=0;
            fin.getline(mass[r], len-1,ch);
            string str=trim(mass[r]);
            for(int it=0;it<str.length();it++) { 
            if(str[it]==' ') {flag=1;break;}
            } 
            if(flag==0) {

                    f2out << str << "\n";  
                    cout << str << "\n";   
            }
        }
        f2out.close(); 
    }
    return 0;
}      

阅读更多:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim(为C++实现了 similair 功能)