std :: string str = "1001 0104 2325 9999"형식의 문자열이 있고이 4 개의 부분 문자열을 공백으로 정수로 저장해야합니다. C (sscanf 사용)에 문자열이있는 것처럼이 작업을 수행하는 우아한 방법이 있습니까? 이것은 숙제 문제가 아닙니다.std :: string에 대한 sscanf와 같습니다.
0
A
답변
1
가장 깨끗한 방법은 아마 istream_iterator와 이제 stringstream을 사용하는 것, 이런 식으로 뭔가 : 사용자가 제공 한 입력의 모호성 약간의가 있음을
std::string str = "1001 0104 2325 9999";
std::istringstream in(str);
std::vector<int> numbers {
std::istream_iterator<int>(in),
std::istream_iterator<int>()
};
// just to show what we did:
for (int i : numbers)
std::cout << i << "\n";
참고 : 그것은 의도 당신이 있는지 분명하지 않다 0104
은 10 진수 또는 8 진수 여야합니다 (앞에 오는 0으로 인해 소스 코드로 해석 될 수 있습니다). 위에서 작성한 코드는 십진수로 해석합니다. 0
을 8 진수로 나타내려면 (변환이 0 일 때 최소한 0x
을 나타냄) 변환의 기준을 0으로 설정하여 수행 할 수 있습니다.
+2
선행'0'을 8 진수로 처리하려면'basefield'를'0'으로 설정하십시오. 'in.setf (std :: ios_base :: fmtflags(), std :: ios_base :: basefield)'를 호출한다. 왜냐하면 거기에 지정된 플래그 나 조작자가 없기 때문이다. 이것이 최선의 해결책인지 여부에 관해서는 그가 가변적 인 수의 필드가 있는지 여부에 달려 있습니다. 매번 정확하게 4 개의 정수가 필요하다면'in >> i1 >> i2 >> i3 >> i4'가 더 좋으며 더 이상 필드가 없는지 확인하는 오류 검사가 있습니다. –
관련 문제
- 1. std :: string에 대한 LPWSTR?
- 2. std :: string에 포인터를 사용해야합니까?
- 3. std :: string에 쓸 수 있습니까?
- 4. C++ : enum을 std :: string에 연결하십시오.
- 5. std :: string에 대한 오버로드가 템플릿 코드에서 감지되지 않았습니다.
- 6. sprintf를 std :: string에 직접 연결 하시겠습니까?
- 7. std :: string에 이중 할당 - 컴파일 오류가 없습니까?
- 8. unterminated char *를 std :: string에 연결하는 것
- 9. std :: string에 대한 함수 포인터의 typedef가 작동하지 않습니다.
- 10. Std :: String에 대한 C++ Printf 스타일 서식 지정
- 11. std :: string에 대한 표준 정의 리터럴 접미사가없는 이유는 무엇입니까?
- 12. C++에서 std :: string에 대한 연산자 접미사 14
- 13. std :: string에 cout 출력을 내 보냅니다.
- 14. std :: string에 소문자가 포함되어 있는지 확인하십시오.
- 15. std :: string에 설정된 문자 수마다 개행을 추가하십시오.
- 16. char 버퍼의 일부를 std :: string에 복사하는 방법?
- 17. std :: string에 void void * (char *없이 0) std :: string
- 18. std :: out_of_range 오류가 C++에서 std :: string에 액세스하는 중
- 19. + Java의 String에 대한 연산자
- 20. PHP의 string에 대한 array_pop?
- 21. String에 대한 도움이 필요하십니까? Java
- 22. C++ std :: string을 포인터 -to-C-String에 전달 매개 변수
- 23. std :: string에 char *를 저장할 때 가장 좋은 방법입니다.
- 24. unordered_sets와 함께 사용하면 std :: string에 해시 함수가 필요합니까?
- 25. (uint8_t) 0x00을 std :: string에 추가하면 cygwin에서 모호한 오버로드 오류가 발생합니까?
- 26. std :: initializer_list의 std :: shared_ptr이 일찍 소멸되는 것 같습니다
- 27. std :: async는 std :: launch :: async로 스레드를 생성하지 않는 것 같습니다.
- 28. jdbc 쿼리에 대한 resultset 대신 string에 할당
- 29. Replace jSon string에 대한 정규 표현식
- 30. string에 문제가 있습니다 :: find
['std :: stringstream' ] (http://en.cppreference.com/w/cpp/io/basic_stringstream). –
@BaummitAugen'std :: istringstream'가 더 적절할 것입니다. –
@JamesKanze 힌트를 보내 주셔서 감사합니다. –