'모든글모음'에 해당되는 글 895건

  1. 2008.05.27 File To String in C++
  2. 2008.05.25 String Parsing
  3. 2007.05.01 bit shift e.g. , 2dim matrix, Defed Func
  4. 2007.04.26 class member 접근과 클래스 내에서 클래스 선언해서 쓰기
  5. 2007.04.12 새집...

2008. 5. 27. 18:13 devel/etc

File To String in C++

method1

  ifstream infile;
  infile.open ("input.txt");
 
if (infile.is_open())
  {
    while (infile.good())
 {



  infile >> str;                                         //stream으로 넘기면 공백, \n 파싱 자동으로 됨
                                                                //웃긴건 str을 int형으로 선언하면 int 형으로 들어간다
  cout<< str<<endl;                                
  tmp =  (char) infile.get();                          //char 형으로 들어감(int로 들어와서)
 }                                                         //.getline() 하면 어케 들어갈지 궁금(string으로 될듯?)
    infile.close();
  }


자세한건 ifstream의 member function을 찾아보도록



  else
  {
    cout << "Error opening file";
  }






 method2
1.파일을 불러들인다
2.파일의 개행문장을 한줄씩 vector에 저장한다
3.저장된 vector의 값을 istringstream을 이용하여 개별단어별로 출력한다

이상입니다.

============================================


//프로그램에서 사용할 헤더파일의 로드
#include<iostream>
#include<vector>
#include<string>
#include<fstream>
#include<sstream>

//표준 이름공간 사용 선언
using namespace std;      

//파일로 부터 읽어들여서 벡터로 store하는 함수의 선언
void store(vector<string> &vv)
{
        //datafile.txt를 읽어들인다
        ifstream file_in("datafile.txt", ios::in);
        //문자열을 읽어들이기 위한 buffer의 선언
        char buffer[100];          
   
        //최대 100글자, 한줄씩 buffer에 저장한다
        while(file_in.getline(buffer, 100, '\n')!=NULL)
    {
                //buffer에 저장된 값을 string type인 벡터로 넣기 위한 string type 변수 tmp의 선언
                string tmp;
                //tmp 에 buffer의 값을 넣는다
            tmp = buffer;
                //벡터 vv에 tmp를 push_back한다
            vv.push_back(tmp);
        }
        //파일의 끝까지 읽고 파일을 닫는다
    file_in.close();    
}

//벡터로 읽어들인 파일의 개행문장을 단어(word)별로 출력하는 함수 print의 선언
void print(vector<string> &vv)
{
        //vector vv의 사이즈만큼 루프를 수행한다
        for (int ii = 0 ; ii != vv.size() ; ++ii )
        {
                //string type 변수 line과 word의 선언
                string line, word;
                //변수 line에 vector vv의 [ii]번째 요소를 반환해서 집어넣는다
                line = vv[ii];

                //line에 저장된 값을 출력하고 사용자의 이해를 돕기 위한 내용문 출력
                cout << endl << "ivec[" << ii << "]에 파일로부터 읽어들여 저장되어있는 한 문장 : "
                         << endl << line << endl
                         << "=========================================================================="
                         << endl << "이하는 각각 단어별로 출력하기 : " << endl << endl;
               
                //istringstream을 이용해 string type 변수 line에 저장된 값을 임시저장한다
                istringstream stream(line);
                //stream이 '\n'을 만날때까지 while구문을 수행한다
                //빈칸을 제외한 각각의 개별 단어를 string type 변수 word에 저장한다
                while (stream>>word)
                {
                        //저장된 word를 한줄씩 화면에 출력한다
                        cout << word << endl;
                }
        //사용자가 한 화면에 한 문장씩 보기 수월하도록 넣은 선택문
        char cmd;
        cout << endl << "계속하시겠습니까? (y/n) : ";
        cin >> cmd;
        //y를 입력하면 for loop 문장을 계속 수행
        if ( cmd == 'y' )
                continue;
        //y가 아니면 loop문장을 빠져나간다
        else break;
        }
}

//main함수의 선언
void main(void)
{
        //datafile의 값을 저장할 string type의 vector ivec의 선언
        vector<string> ivec;


        //store함수를 이용하여 ivec에 한줄씩 string으로 저장
    store(ivec);
        //print함수를 이용하여 ivec에 저장된 line을 word별로 한줄씩 출력
        print(ivec);

}

'devel > etc' 카테고리의 다른 글

Makefile 쉬운 예제  (1) 2009.10.17
윤드림훃의 주옥같은 글  (0) 2009.10.17
Debug Mode - Enable  (0) 2009.01.02
simple fgets source code  (0) 2008.12.02
class member 접근과 클래스 내에서 클래스 선언해서 쓰기  (0) 2007.04.26
Posted by 쵸코케키

2008. 5. 25. 16:50 devel/man & example

String Parsing

1

string tmp; string str("Test string");

size_t found = str.find('i');
tmp.assign(str,0,found);


끝~
i 이후 부분은

tmp.assign(str,found,str.length()) 하면 됨미..


i를 제거 하고 싶으면 found + 1하면 되고





2
string에서 parsing 하기 ,  istringstream 에 관한 간단한 예시( 공백 파싱_ )

'string.h'에 정의된 strtok() 함수가 있습니다.

예제를 보자면

char string[] = "words separated by spaces -- and, punctuation!";
const char delimiters[] = " .,;:!-";
char *token;

token = strtok (string, delimiters); /* token => "words" */
token = strtok (NULL, delimiters); /* token => "separated" */
token = strtok (NULL, delimiters); /* token => "by" */
token = strtok (NULL, delimiters); /* token => "spaces" */
token = strtok (NULL, delimiters); /* token => "and" */
token = strtok (NULL, delimiters); /* token => "punctuation" */
token = strtok (NULL, delimiters); /* token => NULL */


위의 예제에서 delimiters[] 에 설정된 문자들이 구분자로 사용됨을 알수 있습니다.

공백문자마다 쪼개고 싶다면 delimiters[] = " " 라고 사용하시면 됩니다.








#include <iostream>
#include <sstream>
#include <string>
using namespace std;
//istringstream::str

int main () {

  int val,n;

  istringstream iss;
  string strvalues = "32 240 2 1450";

  iss.str (strvalues);

  for (n=0; n<4; n++)
  {
    iss >> val;
    cout << val+1 << endl;
  }

  return 0;
}

'devel > man & example' 카테고리의 다른 글

scanf에서 fflush(stdin) 사용 안하고 \n 파싱해서 없애기  (2) 2011.11.27
function pointer  (0) 2009.11.24
sprintf int to ascii  (0) 2009.11.08
C++ , C File OUTPUT e.g.  (0) 2008.12.02
bit shift e.g. , 2dim matrix, Defed Func  (0) 2007.05.01
Posted by 쵸코케키

1
#
include <stdio.h>

int main(void)
{
 printf("\nsigned  int  min: %d",1<<(sizeof(int)*8-1));
 printf("\nsigned  int  max: %d",~(1<<(sizeof(int)*8-1)));
 printf("\nunsigned int max: %u",~0);
 return 0;
}


2
크기가 m*n인 2차원 배열을 만들 때,

int** aArray=new int*[m];
for(int i=0;i<n;++i) aArray[i]=new int[n];

이렇게 하면 전체초기화를 위해 memset을 하려고 할때 곤란하다. 나중에 delete할때도 또 루프를 돌아야 해서 귀찮다. 하지만 아래 코드처럼 하는건 어떨까? 아! 래! 코! 드!


int** aArray=new int*[m];
aArray[0]=new int[m*n];
for(int i=1;i<m;++i) aArray[i]=aArray[i-1]+n;

이렇게 하면 전체 초기화할때도 memset(aArray[0],0,sizeof(int)*m*n) 하면 되고, 사용이 끝났을 때는 delete[] aArray[0]; delete[] aArray; 이렇게 하면 되니까 말이다.

뒷북이면 Zaphok




3
#define exch(x,y) {int tmp; tmp = x; x=y; t=tmp;}
main() exch(a,b); !!!!!!

'devel > man & example' 카테고리의 다른 글

scanf에서 fflush(stdin) 사용 안하고 \n 파싱해서 없애기  (2) 2011.11.27
function pointer  (0) 2009.11.24
sprintf int to ascii  (0) 2009.11.08
C++ , C File OUTPUT e.g.  (0) 2008.12.02
String Parsing  (0) 2008.05.25
Posted by 쵸코케키



해결

클래스안에서 ->data로 가면 멤버는 주소로  접근이 될까 아니면
직접 접근이 될까?

ex> tail->data!='s' 이런게 가능할까?

data를 리턴하고 싶으면


return tail->prev->data 로 될까 아니면 &로 객체를 넘겨줘야할까?  /////&안해도 됨
그리고 객체 자체가 리턴이 되는듯.

ex>>

class t
{
private:
 class nt
 {public:     char ch;      nt* next;
 };


char t::print()
{ return head->next->ch; }

void t::in(char a)
{head->next->ch=a;}


t test;    test.in(ta[0]);
char tmp=test.print();
cout <<tmp;



class에서 다른 클래스를 선언해서 사용해야만 할때

내가 찾아낸 방법;
private에서 pointer선언후
생성자에서 생성시켜서 주소를 먹고튄다

다른 방법
private에서 직접 생성을 시킨다 -_-;;;;;
exx>>

tree.h 
stack<child*> stkt;
stack<child*>* stktree;

tree.cpp
stktree=&stkt;

이거 그냥 포인터 안쓰고 바로 해도 될꺼같은데

'devel > etc' 카테고리의 다른 글

Makefile 쉬운 예제  (1) 2009.10.17
윤드림훃의 주옥같은 글  (0) 2009.10.17
Debug Mode - Enable  (0) 2009.01.02
simple fgets source code  (0) 2008.12.02
File To String in C++  (0) 2008.05.27
Posted by 쵸코케키

2007. 4. 12. 19:04 카테고리 없음

새집...

사용자 삽입 이미지



집터를 옮길지 그대로 안주해 있을지는 아직 미정인 상태...


새집이 몸에 맞는지 몸을 새집에 맞게 늘려야 하는지 우선 봐야겠다..

Posted by 쵸코케키

블로그 이미지
chocokeki
쵸코케키

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

최근에 올라온 글

최근에 달린 댓글

글 보관함