2009-05-22 5 views
-1

문자열에 젤리 인 텍스트 파일이 있습니다. 파일은 다음과 같습니다 : 0.2abc 0.2 .2abc .2 abc.2abc abc.2 abc0.20 .2 . 20문자열 안에 float을 체크하고 결과를 반환합니까?

결과를 확인한 다음,이를 구문 분석하여 플로트를 분리하고 싶습니다. 결과는 다음과 같습니다. 0.2 0.2abc 2 20 2abc abc0.20 abc

이것은 expalined입니다. char가 있는지 여부에 관계없이 2 자리 (전후 '.'(최대 정))가 있는지 확인하십시오. '.'사이트가 1 개만있는 경우 '.'자릿수입니다. 완전히 멈출 것입니다.

어떻게 STRING을 구문 분석하여 그와 같은 결과를 분리 할 수 ​​있습니까? 나는 iterator를 사용하여 '.' 그것의 pos하지만 여전히 붙어있어.

+1

Homeworkoverflow? – Alterlife

+0

그렇다면 아무 문제도 없습니다;) – Konstantinos

+0

몽골 인님께! 당신은 질문을하고 있으며 아마도 몇 분 안에 최고의 프로그래밍 전문가로부터 좋은 답변을 얻을 것입니다. 적어도 사람들이 편안하게 이해할 수있는 방식으로 질문을 정리할 시간을 투자 할 수 있습니까? 원하는 것은 무엇입니까? –

답변

0

는 정규식을 사용하여 번호를 추출 할 수있는 것처럼 들립니다.

문자열 내에서 부동 값을 추출하려면이 정규 표현식을 사용해보십시오.

[0-9]+\.[0-9]+ 

정수 값을 추출하지 않습니다. 즉 234abc

가 C++로 정규식을 사용하는 기본 방법입니다하지만 난 당신이

+0

다른 클래스를 사용할 수 없습니다. 왜냐하면 나는이 과제를위한 초보자이기 때문입니다. 나는 getline을 파싱 한 다음 bintree에 넣는다. 주먹은 그걸 분석해야합니다. 그것은 텍스트의 한 줄입니다. 공백 (multi-ws), 일반 문자 @ # $ % &^/,;><끝 ... 등을 구문 분석해야하는 다른 것이 있습니다. 답장을위한 Thyx –

1

첫 번째 것은 당신에게 C++로 정규식을 사용할 수 있도록 빠른 구글 검색을 this 라이브러리를 발견하는 경우 나도 몰라 입력을 단어로 분리해야합니다. 쉬운, 그냥 사용하지 마십시오 .getline() 대신에 'while (cin >> strWord) {/ * 단어로 물건을 채우기 * /};

두 번째는 나쁜 입력 단어를 일찍 쫓아내는 것입니다 : 2 문자 이하의 단어, 하나 이상의 . 또는 . 첫 번째 또는 마지막 단어.

이제는 .이 가운데 어딘가에 있음을 알게되었습니다. find()는 반복자를 줄 것이다. ++ 및 - 다음 및 이전 반복기를 제공합니다. *는 반복자가 가리키는 문자를 제공합니다. isdigit()는 문자가 숫자인지 여부를 알려줍니다. 재료를 함께 첨가하면 끝납니다.

+0

은 cin >> strWord istringstream입니까? 공백 문자로 기본 설정되어 있습니까? 나는 이것에 관하여 많은 기사와 질문을 수색했다. 그러나, 나는 그것을 제대로 작동하는 오버로드 연산자를 사용하는 방법을 명확하게 이해할 수 없었다. –

+0

"cin"은 표준 문자 입력의 이름입니다. 일반적으로 키보드이지만 CMD.EXE 및 bash와 같은 많은 명령 줄을 사용하면 리디렉션을 허용합니다. 그것은 istringstream 아니지만 istream입니다. istringstream에있는 데이터가 있다면 cin 대신 해당 스트림을 사용하십시오. 중요한 부분은 ">> 단어"입니다. 연산자 >> (istream & is, std :: string & word) 실제로 한 번에 단어를 재사용하십시오. – MSalters

0

"해석기"디자인 패턴을보아야 할 것 같습니다.

또는 "주"디자인 패턴을 손으로 직접 사용할 수 있습니다.

두 가지 예가 모두 웹에 있어야합니다.

1

위의 몇 가지 상당히 복잡한 조언처럼 보이지만 반드시 도움이되지는 않습니다.

귀하의 질문에 최종 결과가 어떻게 나타나는지 명확하게 알 수는 없습니다. 부동 소수점 배열이 필요합니까? 그 합을 원하니? 결과를 인쇄 하시겠습니까?

숙제에 도움이 필요하면 자신의 시도를 게시하는 것이 가장 좋습니다. 다른 사람들은 숙제를 돕기 위해 개선을 도울 수 있습니다.

문자열을 하위 문자열 (토큰)으로 나누어 쓰레기를 버리는 것이 좋습니다.

  • 문자를 허용하고 true (부동 소수점 숫자의 일부) 또는 false (아닌 값)를 반환하는 함수를 작성하십시오.
  • 반복자 또는 색인을 사용하여 문자열을 따라 스캔하십시오.
  • 현재 char은 토큰의 일부가 아니지만 건너 뛰십시오.
  • 현재 char이 토큰의 일부인 경우
  • 등의 다른 문자열로 복사하여 모든 부동 소수점 하위 문자열을 가져옵니다.
  • 그러면 std :: stringstream 또는 :: atof()를 사용하여 변환 할 수 있습니다.

약간의 성과가 있었으면 좋겠어요.

관련 문제