Задачка по С++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by NaX[no]rT, 19 Dec 2006.

  1. NaX[no]rT

    NaX[no]rT Members of Antichat

    Joined:
    3 Sep 2005
    Messages:
    489
    Likes Received:
    201
    Reputations:
    202
    Вообщем есть файл, в нем примерно такие данные:
    Code:
    1 1 2 3 1
    2 2 2 3 3
    1 2 5 34 32
    345 3 234 23 23
    Как средствами С++ выдрать эти данные из файла и подготовить их к дальнейшей работе. Интересны ваши предложения, по решению данной задачи.
     
    _________________________
  2. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    а че мало читалок файлов??
    тем же ifstream можно, или fread() или fgetc() вариантов масса!
    а ваше лучше раскажи куда те их записать то надо?? в масив? в чаровский или интовый?
     
  3. NaX[no]rT

    NaX[no]rT Members of Antichat

    Joined:
    3 Sep 2005
    Messages:
    489
    Likes Received:
    201
    Reputations:
    202
    В массив int
     
    _________________________
  4. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    вот лови один из вариантов
    Code:
    #include <stdio.h>
    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    
    void main(void)
    {
    	FILE *f;
    	f=fopen("1.txt","r");
    	char c[16];
    	int byf[128],i=0,j=0;
    
      while(1)
      {
         i=0;
    	 while(1)
    	 {
           c[i]=fgetc(f);
    	   if(c[i]==' ' || c[i]=='\n' || c[i]=='\t' || c[i]==EOF) 
    		 break;
    	   i++;
    	 }
    	 byf[j]=atoi(c);
    	 j++;
    	 if(c[i]==EOF)
    		break;
      }
    
    		for(i=0;i<j;i++)
    			cout<<byf[i]<<endl;
    	
    }
    
     
    1 person likes this.
  5. NaX[no]rT

    NaX[no]rT Members of Antichat

    Joined:
    3 Sep 2005
    Messages:
    489
    Likes Received:
    201
    Reputations:
    202
    Вариант, но не нравится мне) оставлю свою организацию тогда :)
     
    _________________________
  6. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    элементарно, что тут сложного?
    создаем двухмерная массив (матрицу) и пишем туда числа.
    ifstream/fscanf
     
  7. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    а что не нравиться?? те надо чтоб как матрицу сохраняло?? в двумерный массив
     
  8. sni4ok

    sni4ok Elder - Старейшина

    Joined:
    4 Nov 2006
    Messages:
    115
    Likes Received:
    37
    Reputations:
    12
    решение

    Code:
    #include <string>
    #include <vector>
    #include <fstream>
    #include <sstream>
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    	//вариант 1: загоняем все значения в вектор
    	std::vector<int> buf;
    	{
    		std::ifstream f("C:/file.txt");
    		std::copy(std::istream_iterator<int>(f),std::istream_iterator<int>(),std::back_inserter(buf));
    	}
    
    	//вариант 2: загоняем все значения в вектор векторов
    	std::vector<std::vector<int> > buf2;
    	std::ifstream f("C:/file.txt");
    	{
    		std::string tmp;
    		while(std::getline(f,tmp,'\n')){
    			std::vector<int> buf;
    			std::stringstream ss;
    			ss << tmp;
    			std::copy(std::istream_iterator<int>(ss),std::istream_iterator<int>(),std::back_inserter(buf));
    			buf2.push_back(buf);
    		}
    	}
    	return 0;
    }