C ++ 문자열 및 숫자 변환 전체 가이드

문자열 형식으로 저장된 숫자와 디지털 형식으로 저장된 숫자에는 차이가 있습니다.

예를 들어 문자열 "2679"는 숫자가 아닙니다. 이는 ASCII 코드 2, 6, 7, 9의 4 개의 문자 시퀀스입니다. 문자열 "2679"는 숫자가 아니기 때문에 컴파일러는 더하기, 곱하기, 나누기와 같은 수학적 연산을 수행 할 수 없습니다. 숫자로 표시되는 문자열은 산술 연산자와 함께 사용하기 전에 먼저 숫자 형식으로 변환해야합니다.

마찬가지로 int, long 및 double과 같은 디지털 형식의 프로그램 값은 때때로 문자열 형식으로 변환해야 결과 문자열이 파일 또는 기타 입력 및 출력 장치 또는 메모리에 저장된 문자로 즉시 출력 될 수 있습니다. 나중에 사용할 문자열 개체입니다.

사용자가 키보드에 숫자를 입력하면 사용자가 입력 한 일련의 문자 (숫자)와 마찬가지로 숫자가 문자열 형식으로 입력됩니다. 에서는  C ++  와 같은 번호는 일반적 >> 스트림 추출 조작에 의해 판독된다. 숫자 변수에 저장하기 전에 연산자는 필요에 따라 자동으로 변환을 수행합니다. 출력 중에 숫자를 문자열로 역변환하는 것은 스트림 출력 연산자 <<에 의해 수행됩니다.

숫자 변환에 문자열 스트림 객체 사용

C ++에는 ostringstream 및 istringstream이라는 두 개의 클래스가 있으며, 이는 메모리의 값에 대한 문자열 / 숫자 변환을 수행하는 데 사용할 수 있습니다.

ostringstream 클래스는 ostream의 하위 클래스이며 (cout도이 클래스에 속함) 스트림 삽입 연산자 <<를 사용하여 숫자 값을 문자열로 변환합니다. ostringstream 유형 객체는 cout 및 파일 객체와 동일한 방식으로 작동하지만 화면이나 파일에 데이터를 쓰는 대신 포함 된 문자열 객체에 기록합니다.

ostringstream 객체에서 <<를 사용할 때마다 필요한 숫자-문자열 변환을 수행하고 결과를 문자열 끝에 추가합니다. ostream 클래스의 모든 멤버 함수와 연산자를 지원하는 것 외에도 ostringstream 객체는 표 1에 표시된 str 멤버 함수도 지원합니다.

istringstream 클래스는 istream에서 파생됩니다. 내부에 문자열 객체가 포함되어 있으며 함수는이를 "읽을"수있는 입력 스트림으로 사용합니다.

입력 스트림은 객체가 생성 될 때 isringstream 생성자에 의해 설정되거나 객체가 생성 된 후 str (string s) 함수를 호출하여 설정할 수 있습니다. 스트림 추출 연산자 >>는 닫힌 문자열에서 읽고 필요한 경우 문자열을 숫자로 변환합니다. 표 1은 isringstream의 멤버 함수를 나열합니다. sstream 이러한 클래스를 사용 하려면 프로그램 에 헤더 파일 을 포함해야합니다  .
 

표 1 ostringstream 및 isringstream 클래스의 멤버 함수
회원 기능 그리 술
istringstream (문자열 s) istringstream의 생성자 : 객체 입력 스트림의 초기 값을 설정합니다. 예 :
istringstream istr ( "50 64 28");
ostringstream (문자열 s) ostringstream의 생성자 : 객체 출력 스트림의 초기 값을 설정합니다. 예 :
ostringstream ostr ( "50 64 28");
문자열 str () ostringstream 또는 isringstream 객체에 포함 된 문자열을 반환합니다. 예 :
string is = istr.str ();
string os = ostr.str ();
무효 str (문자열 & s) 입력 또는 출력 스트림의 문자열을 개체로 설정합니다. 예 :
ostr.str ( "50 64 28");
istr.str ( "50 64 28");


다음 프로그램은 이러한 클래스의 사용법을 보여줍니다.

 
  1. //이 프로그램은 sstream 객체의 사용을 보여줍니다.
  2. #include <sstream>
  3. #include <iostream>
  4. #include <문자열>
  5. u sin g namespace std;
  6.  
  7. int 메인 ()
  8. {
  9. string str = "John 20 50"; // 읽을 문자열
  10. const char * cstr = "에이미 30 42"; // 읽을 Cstring
  11. istringstream istr1 (str); // istr1은 str에서 읽습니다.
  12. istringstream istr2; // istr2는 cstr에서 읽습니다.
  13. ostringstream ostr; // 쓸 ostringstream 객체
  14. 문자열 이름;
  15. int score1, score2, average_score;
  16.  
  17. // 이름과 점수를 읽고 평균을 계산 한 다음 ostr에 씁니다.
  18. istr1 >> 이름 >> score1 >> score2;
  19. average_score = (score1 + score2) / 2;
  20. ostr << name << "에는 평균 점수가 있습니다."<< average_score << "\ n";
  21. // C 문자열에서 읽도록 istr2를 설정하고 위를 반복합니다.
  22. istr2.str (cstr);
  23. istr2 >> 이름 >> score1 >> score2;
  24. average_score = (score1 + score2) / 2;
  25. ostr << name << "에는 평균 점수가 있습니다."<< average_score << "\ n";
  26. // ostr에서 16 진수 출력으로 전환
  27. ostr << 16 진수;
  28. // Amy의 점수를 16 진수로 작성
  29. ostr << name << "의 16 진수 점수는"<< score1 << "및"<< score2 << "\ n"입니다.
  30. // ostr에서 문자열을 추출하여 화면에 인쇄합니다.
  31. cout << ostr.str ();
  32. 반환 0;
  33. }

프로그램 출력 :

John은 평균 점수 35
Amy는 평균
점수 36 Amy의 16 진수 점수는 1e 및 2a입니다.

이러한 클래스에는 8 진수 및 16 진수와 같은 다른 기수를 사용하여 숫자를 문자열로 변환하는 기능을 포함하여 ostream 및 istream 개체의 모든 기능이 있습니다. 물론 그들은 또한 결함이있어서 프로그래머가 삽입 및 추출 연산자를 사용하여 변환을 수행 할 수 있도록 sstream 객체를 만들도록 강요합니다.

숫자 변환 기능

C ++ 11은 T 유형의 숫자 ​​값을 문자열 형식으로 변환하는 여러 to_string (T 값) 함수를 제공합니다. 다음은 여러 to_string () 함수 목록입니다.

문자열 to_string (int value)
문자열 to_string (long 값)
문자열 to_string (double 값)

다음 코드 예제를보십시오.

 
  1. int a = 5;
  2. 문자열 str = to_string (a * a);
  3. cout << "5의 제곱은"<< str << endl;

위의 예는이 일련의 함수의 사용법을 보여줍니다. 다음 문자열을 인쇄합니다.

5의 제곱은 25입니다.

to_string () 함수는 10 진수가 아닌 정수의 변환을 처리 할 수 ​​없습니다. 이 기능이 필요하면 ostringsteam 객체를 사용하여 변환을 완료해야합니다.

문자열에서 숫자로의 변환은 stoX () 시리즈 함수에 의해 수행 될 수 있습니다. 이 일련의 함수의 멤버는 문자열을 int, long, float 및 double 유형의 숫자로 변환 할 수 있습니다. 구체적인 구문은 다음과 같습니다.

int stoi (const strings str, size_t * pos = 0, int base = 10)
long stol (const strings str, size_t * pos = 0, int base = 10)
float stof (const strings str, size_t * pos = 0)
double stod (const 문자열 str, size_t * pos = 0)

첫 번째 형식 매개 변수 str은 문자열 (예 : "-342"또는 "3.48"등)이며 적절한 디지털 형식으로 변환됩니다. 이 함수는 가능한 가장 긴 str 접두사를 숫자로 변환하고 정수 주소 pos를 반환 할 수 있습니다. 여기서 변환 할 수없는 첫 번째 문자의 인덱스는 pos에 저장됩니다. size_t 유형은 표준 라이브러리에 정의되어 있으며 배열, 벡터 또는 문자열에서 부호없는 정수 또는 인덱스의 크기를 나타내는 데 자주 사용됩니다.

예를 들어 문자열 "-34iseven"을 변환하려고하면 정수 -34가 성공적으로 반환되고 변환 할 수없는 첫 번째 문자의 pos 위치가 3으로 설정됩니다. base 매개 변수는 정수 변환에만 적용 할 수 있으며 변환에 사용되는 기본을 나타냅니다. pos 및 base 매개 변수는 모두 선택 사항이므로 무시할 수 있습니다. pos가 생략되면 중지 문자의 인덱스가 저장되지 않습니다. base가 생략되면 기본값은 10 진수입니다. 문자열 str에 "is-34 even?"과 같은 잘못된 값이 포함 된 경우 변환이 수행되지 않고 함수에서 invalid_argument 예외가 발생합니다.

다음 프로그램은 문자열 변환 기능의 사용법을 보여줍니다.

일반 텍스트 복사
 
  1. //이 프로그램은 stoXXX () 사용을 보여줍니다.
  2. // 숫자 변환 함수.
  3. #include <문자열>
  4. #include <iostream>
  5. 네임 스페이스 std 사용;
  6.  
  7. int 메인 ()
  8. {
  9. 문자열 str; // 변환 할 문자열
  10. size_t 위치; // 정지 캐릭터의 위치 유지
  11. // 문자열을 double로 변환
  12. str = "-342.57은 숫자";
  13. cout << "문자열은"<< str << endl;
  14. 더블 d = stod (str, & pos);
  15. cout << "변환 된 double은"<< d << endl;
  16. cout << "중지 문자는"<< str [pos] << "위치"<< pos << endl;
  17. // 문자열을 정수로 변환 (기본값은 십진수)
  18. str = "-342.57은 숫자";
  19. cout << "\ n 문자열은"<< str << endl;
  20. int i = stoi (str, & pos);
  21. cout << "변환 된 정수는"<< i << endl;
  22. cout << "중지 문자는 위치"<< pos << endl에서 "<< str [pos] <<"입니다.
  23. // 문자열을 int로 변환 (베이스는 이진)
  24. str = "01110 이진수";
  25. cout << "\ n 문자열은"<< str << endl;
  26. i = stoi (str, & pos, 2);
  27. cout << "변환 된 이진 정수는"<< i << endl;
  28. cout << "중지 문자는"<< str [pos] << "위치"<< pos << endl;
  29. 반환 0;
  30. }

프로그램 출력 :

문자열은 -342.57은 숫자입니다
. 변환 된 double은 -342.57입니다
. 중지 문자는 위치 7에서 i입니다

. 문자열은 -342.57입니다. 숫자
변환 된 정수는 -342입니다
. 중지 문자는입니다. 위치 4

에서 문자열은 01110
이진수 변환 된 이진 정수는 14입니다
. 중지 문자는 위치 5에서 b입니다.

추천

출처blog.csdn.net/digitalkee/article/details/108237482