저는 C ++를 처음 사용합니다. 라는 파일을 읽고 symbols.txt
벡터를 기호로 채운 다음 범위에있는 문자를 가져 와서 [d;p]
첫 번째 벡터에서 지우면서 두 번째 벡터로 이동 하는 프로그램을 만들려고합니다 .
int main(){
vector<char> sym1;
vector<char> sym2;
int p = 100, d = 80;
char x;
ifstream symbols("symbols.txt");
while (symbols >> x )
{
sym1.push_back(x);
}
for(int i = 0; i < sym1.size(); i++){
if (sym1[i] < p && sym1[i] > d){
sym2.push_back(sym1[i]);
sym1.erase(sym1.begin()+i);
}
}
}
이렇게하면 동일한 문자가 없으면 프로그램이 작동하고 그렇지 않으면 문자의 절반 만 이동하고 나머지 절반은 그대로 둡니다.
구현에서, 당신은 통지에 가장 먼저해야 할 것은 당신의 것입니다 for
루프, sym1.size()
당신이 호출하면 변경 sym1.erase()
. 둘째, 변수가 i
매번 증가 하기 때문에 벡터의 일부 요소를 건너 뜁니다.
예를 들어 인덱스 5의 요소가 지워지면 인덱스 6의 요소가 아래로 이동하여이를 대체합니다. 그 동안 루프는 i++
하므로 인덱스 5로 이동 한 요소를 건너 뜁니다.
C ++ 컨테이너와 함께 반복기를 사용해야한다고 생각합니다. 아래는 예입니다.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<char> sym1;
vector<char> sym2;
int p = 100, d = 80;
char x;
// ifstream symbols("symbols.txt");
// while (symbols >> x)
// {
// sym1.push_back(x);
// }
for(int i = 0; i < 200; i++) {
sym1.push_back(i);
}
int size = sym1.size();
for(vector<char>::iterator it = sym1.begin(); it != sym1.end(); ){
if (*it < p && *it > d){
sym2.push_back(*it);
it = sym1.erase(it);
}
else
it++;
}
for(vector<char>::iterator it = sym2.begin(); it != sym2.end(); it++) {
cout << (int)*it << " ";
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다