std:: 문자열에 문자를 추가하는 방법?
다음은 오류로 인해 실패합니다.prog.cpp:5:13: error: invalid conversion from ‘char’ to ‘const char*’
int main()
{
char d = 'd';
std::string y("Hello worl");
y.append(d); // Line 5 - this fails
std::cout << y;
return 0;
}
저는 또한 컴파일을 하지만 런타임에 임의로 동작하는 다음과 같은 것을 시도했습니다.
int main()
{
char d[1] = { 'd' };
std::string y("Hello worl");
y.append(d);
std::cout << y;
return 0;
}
이 바보 같은 질문에 죄송합니다. 하지만 구글 주변을 검색해보니 "char array to charttr", "charttr to char array" 등이 보입니다.
y += d;
사용할 것입니다.+=명명된 함수 대신 연산자.
사용하다push_back():
std::string y("Hello worl");
y.push_back('d')
std::cout << y;
append 메서드를 사용하여 std::string var에 char를 추가하려면 다음 오버로드를 사용해야 합니다.
std::string::append(size_type _Count, char _Ch)
편집 : 맞습니다 상황 도움말에 표시된 size_type 매개변수를 잘못 이해하였습니다.추가할 문자 수 입니다.그래서 정확한 전화는
s.append(1, d);
것은 아니다.
s.append(sizeof(char), d);
아니면 가장 간단한 방법:
s += d;
언급된 다른 것들 외에도, 문자열 생성자 중 한 명이 문자와 해당 문자에 대한 반복 횟수를 취합니다.그래서 당신은 그것을 하나의 차를 추가하는데 사용할 수 있습니다.
std::string s = "hell";
s += std::string(1, 'o');
나는 여러 명제들을 큰 루프로 실행하여 테스트합니다.마이크로소프트 비주얼 스튜디오 2015를 컴파일러로 사용했고 프로세서는 i7, 8Hz, 2GHz입니다.
long start = clock();
int a = 0;
//100000000
std::string ret;
for (int i = 0; i < 60000000; i++)
{
ret.append(1, ' ');
//ret += ' ';
//ret.push_back(' ');
//ret.insert(ret.end(), 1, ' ');
//ret.resize(ret.size() + 1, ' ');
}
long stop = clock();
long test = stop - start;
return 0;
이 테스트에 따르면 결과는 다음과 같습니다.
operation time(ms) note
------------------------------------------------------------------------
append 66015
+= 67328 1.02 time slower than 'append'
resize 83867 1.27 time slower than 'append'
push_back & insert 90000 more than 1.36 time slower than 'append'
결론
+=좀 더 이해할 수 있을 것 같지만, 만약 당신이 속도에 신경 쓴다면, append를 사용하세요.
+= 연산자 연결 텍스트, () 메서드 연결 텍스트 추가 또는 push_back () 메서드 연결 텍스트를 시도합니다.
이 게시물의 링크에는 각각의 API를 사용하는 방법에 대한 예시도 포함되어 있습니다.
문제:
std::string y("Hello worl");
y.push_back('d')
std::cout << y;
char = 'd'와 같은 char의 이름을 사용하는 것이 아니라 'd'를 가져야 한다는 것입니까? 아니면 제가 틀린 것입니까?
int main()
{
char d = 'd';
std::string y("Hello worl");
y += d;
y.push_back(d);
y.append(1, d); //appending the character 1 time
y.insert(y.end(), 1, d); //appending the character 1 time
y.resize(y.size()+1, d); //appending the character 1 time
y += std::string(1, d); //appending the character 1 time
}
다음 예제에서는 문자 리터럴을 직접 사용할 수 있었습니다.y += 'd';.
두 번째 예는 관련이 없는 이유로 거의 효과가 있었을 것입니다.char d[1] = { 'd'};효과는 없었지만,char d[2] = { 'd'};(배열이 크기 2임을 유의하십시오) 대략 다음과 같은 작업이 이루어졌을 것입니다.const char* d = "d";, 문자열 리터럴을 추가할 수 있습니다.y.append(d);.
아직 언급하지 않은 삽입 옵션도 추가하고 있습니다.
std::string str("Hello World");
char ch;
str.push_back(ch); //ch is the character to be added
OR
str.append(sizeof(ch),ch);
OR
str.insert(str.length(),sizeof(ch),ch) //not mentioned above
das 포인터 y.append(*d)를 사용해 보십시오.
간단한 방법을 찾았는데...전 그 일을 해결할 필요가 있었어요char날렵하게 만들어지던 끈 위에 말이죠.나는 필요했습니다.char list;사용자에게 선택권을 주고 그 선택권을 사용했기 때문입니다.switch()진술.
저는 단지 다른 것을 추가했을 뿐입니다.std::string Slist;그리고 새 문자열을 "list" 문자와 동일하게 설정합니다. - a, b, c 또는 최종 사용자가 다음과 같이 선택하는 것입니다.
char list;
std::string cmd, state[], Slist;
Slist = list; //set this string to the chosen char;
cmd = Slist + state[x] + "whatever";
system(cmd.c_str());
복잡함이 시원할 수도 있지만 단순함이 더 시원합니다. IMHO
이를 수행하는 세 가지 방법이 있습니다.
예를 들어 다음과 같은 코드가 있습니다.
std::string str_value = "origin";
char c_append = 'c';
- 저희는 주로 push_back을 사용합니다.
str_value.push_back(c)- += 를 사용합니다.
str_value += c- 덧셈법을 사용합니다.
str_value.append(1,c)
그리고 http://www.cplusplus.com/reference/string/string/ 에서 문자열을 사용하는 방법에 대해 자세히 알아볼 수 있습니다.
str.append(10u,'d'); //appends character d 10 times
문자를 추가하고 싶은 횟수에 대해 10u가 아닌 10u를 썼다는 것을 주목하십시오. 10을 어떤 숫자로 대체하십시오.
보충적인 답변, 왜냐하면 분명히 이 답변은 많은 찬성표를 가진 답변은 다음을 사용할 것을 제안하기 때문입니다.push_back('c')또 다른 사람은 하지 말라고 하고 있습니다.두 답변 모두 좀 오래됐으니 업데이트를 해보겠습니다.
GNU에 의한 STL, libstdc++을 사용하여, 다음의 5가지 방법을 추가하는 수행.char에 이르기까지std::string테스트 예정:str.append(),str += 'c',str.resize(str.size() + 1, 'c'),str.push_back('c'),그리고.str.insert(str.end(), 1, 'c').
작업 중에 사용되는 최소 시간을 기준으로 하면 다음과 같은 결과가 결과입니다.
| params \ cpu_time (4dp) | append() |
+= |
resize() |
push_back() |
insert() |
|---|---|---|---|---|---|
| optim = 없음 컴파일러 = Clang 11.0 std = c++11 |
2.6255 1.1t |
2.4826 t |
3.3396 1.3t |
2.4759 t |
4.5967 2t |
| optim = 없음 컴파일러 = Clang 15.0 std = c++20 |
14.1841 1.5톤 |
9.3077 t |
15.7846 1.7t |
9.7907 1.1t |
27.1050 2t |
| optim = O3 컴파일러 = Clang 11.0 std = c++11 |
19.1018 2t |
9.9812 t |
25.1597 2.5t |
10.0466 t |
17.5578 2t |
| optim = O3 컴파일러 = Clang 15.0 std = c++20 |
9.9465 t |
9.8468 t |
9.9519 t |
9.8686 t |
9.9145 t |
그+=연산자와push_back()지속적으로 가장 빠른 방법이며, 그 다음이 됩니다.append()(1.1t - 2t),resize()(1.3t - 2.5t) 및insert()(2t)
push_back을 사용하는 경우 문자열 생성자에 대한 호출이 없습니다.그렇지 않으면 주조를 통해 문자열 개체를 만든 다음 이 문자열의 문자를 다른 문자열에 추가합니다.작은 캐릭터에 너무 많은 문제 ;)
언급URL : https://stackoverflow.com/questions/1472048/how-to-append-a-char-to-a-stdstring
'codememo' 카테고리의 다른 글
| PHP에서 알림창을 표시하는 방법은? (0) | 2023.11.04 |
|---|---|
| 경로에 XML 잘못된 문자가 있습니다. (0) | 2023.11.04 |
| 리소스를 로드하지 못했습니다. 서버가 401(무허가) /App/Angular 상태로 응답했습니다.JS/angular.min.js (0) | 2023.11.04 |
| ng-show 교란성 div 레이아웃 - angularJS (0) | 2023.11.04 |
| PowerShell의 배열에서 배열 목록을 만드는 방법은 무엇입니까? (0) | 2023.11.04 |