与阅读不同格式的数字字符有关的问题

  • 本文关键字:数字字符 问题 格式 c++ io
  • 更新时间 :
  • 英文 :


如何读取这些元素并将它们存储到两个不同的数组中。,即:<?>中的数字和[?]中要分别读入和存储的字。

<98>
Avs [adadada]
<45>
[adafaf] BBBHADA
asdadqd aada [Mammoth]
<-1> // ends the read

文件中其余的信息是无用的,不需要存储。

编辑:

根据其中一个答案的建议,这是我的第一次尝试:

#include <iostream>
#include <sstream>
#include <fstream>
#include <string.h>

using namespace std;
int main(int argc, char* argv[])
{
    if(argc != 3)
        cout<< "Error! Not enough file!"<<endl;
    int** page = new int*[];
    char** words = new char*[];
}
//--------------------------------------------------------- 
void readInput(int** page1, char** name1){
    istream is;
    char par1, par2;
    int  usefulVal;
    is >> par1 >> usefulVal >> par2;
    // check if any input
    if(!is) return is;
    // check for valid input format
    if (par1 != '<' || par2 != '>'){
    // set failbit to indicate invalid input format
       is.clear(ios_base::failbit);
    // assign input values to second argument
    page1(usefulVal);
    char par_1, par_2;
    string string_value;
    is >> par1 >> string_value >> par2;
    if(!is) return is;
    if (par_1 != '[' || par_2 != ']')
    {
       is.clear(ios_base::failbit);
       return is;
    }
    name1(string_value);
    return is;
}

问题:

<罢工> 1。是否有办法分别读取和存储上述元素?
2. 我做错了什么?

注:我只是在尝试一些c++。希望有人能指点一下,谢谢!

要指定您的格式和只读特定元素,您可以重载operator >>。例如,第一种格式:< int_value >,可以用:

实现
istream& operator>>(istream& is, class_name& array_name){
   char par2, par2;
   int  int_value;
   is >> par1 >> int_value >> par2;
   // check if any input
   if(!is) return is;
   // check for valid input format
   if (par1 != '<' || par2 != '>'){
       // set failbit to indicate invalid input format
       is.clear(ios_base::failbit);
       return is;
   }
   // assign input values to second argument
   array_name(int_value);
   // chain for consecutive use
   return is;
} 

和第二种格式:[ string_value ] with:

istream& operator>>(istream& is, class_name& separate_array_name){
   char par2, par2;
   string string_value;
   is >> par1 >> int_value >> par2;
   if(!is) return is;
   if (par1 != '[' || par2 != ']'){
       is.clear(ios_base::failbit);
       return is;
   }
   separate_array_name(string_value);
   return is;
} 

注意:

两个示例中的第二个参数:class_name& array_nameclass_name& separate_array_name不是真正的类型,留给您决定/实现。

编辑:

  1. 你的main()中没有使用你定义的函数。
  2. 函数需要在main()之前定义或前向声明。
  3. 限制指针和动态分配内存的过度使用,因为它需要在最后处理(释放)。
  4. 查找如何使用istream:文件名,模式等
  5. 更喜欢简单的函数,即只做一个进程。它更容易实现和检测错误。

最新更新