2017-12-29 1 views
-2

C++에서 주어진 문자열의 다른 부분 문자열을 모두 가능한 한 쌍으로 만들고 싶습니다. 나는 다음과 같은 두 가지 방법을 시도 : 한다고 가정 abfabgab 내 문자열 사용하여 내가 좋아하는 문자열 쌍의 모든 가능한 조합을보고 싶어 무차별입니다 : ab, af, aa, ab, ag, ab을하고 두 번째 bf, ba을 위해 ... 등등. C++ :이 특별한 경우를 위해 한 쌍의 문자열을 문자열로 만드는 방법은 무엇입니까?

string sbstr; // where s is the string from which I wanna make substrings pair 
    for(unsigned int i=0; i<s.length()-1; ++i) 
    { 
     for(unsigned int j=i+1; j<s.length(); ++j) 
     { 
     sbstr=(char)s[i]+(char)s[j]; 
     cout<<sbstr<<" "; 
     } 
     cout<<endl; 
    } 

나는 너무 다음과 같은 노력하지만, 몇 가지 오류를 보여줍니다

char two[2]; 
    string sbstr; 
    for(unsigned int i=0; i<s.length()-1; ++i) 
    { 
     for(unsigned int j=i+1; j<s.length(); ++j) 
     { 
     two[0]=s.at(i); 
     two[1]=s.at(j); 
     sbstr=two; 
     cout<<sbstr<<" "; 
     } 
     cout<<endl; 
    } 

이번에는 각 문자열의 끝 부분에 쓰레기 값이 있습니다. 알아 내도록 도와주세요. 미리 감사드립니다.

+0

'(숯) S [I]가 + (숯)의 [J ]'두 값을 연결하는 대신에 추가합니다. 두 번째 버전의 C 배열에서' '\ 0''터미네이터를 놓쳤습니다. – mch

+0

'cout << s [i] << s [j];' –

+0

@mch 네, 맞습니다. 나는 이것을 가지고 – jackyone

답변

2

mch가 오류를 지적했습니다. C++의 문자열에는 '+'를 추가 할 수 있지만 코드 스 니펫은 문자를 사용하며 8 비트 부호있는 정수로 추가됩니다. 문자 배열을 사용하고 종료 문자 '\ 0'을 기억하거나 문자열에 '+'를 추가하여 문자열에 추가하십시오.

한 동작 예 :

void subStrings(string s) { 
    char sbstr[3]; 
    for (unsigned int i = 0; i < s.length() - 1; ++i) { 
     for (unsigned int j = i + 1; j < s.length(); ++j) { 
      sbstr[0] = (char) s[i]; 
      sbstr[1] = (char) s[j]; 
      sbstr[2] = 0; 
      cout << sbstr << " "; 
     } 
     cout << endl; 
    } 
} 

그리고 다른 :

void subStrings(string s) { 
    string substring = ""; 
    for (unsigned int i = 0; i < s.length() - 1; ++i) { 
     for (unsigned int j = i + 1; j < s.length(); ++j) { 
      substring = ""; 
      substring += (char) s[i]; 
      substring += (char) s[j]; 
      cout << substring << " "; 
     } 
     cout << endl; 
    } 
} 

CHAR 캐스팅없이 :

void subStrings(string s) { 
    string substring = ""; 
    for (unsigned int i = 0; i < s.length() - 1; ++i) { 
     for (unsigned int j = i + 1; j < s.length(); ++j) { 
      substring = ""; 
      substring = substring + s[i] + s[j] ; 
      cout << substring << " "; 
     } 
     cout << endl; 
    } 
} 
+1

std :: string에는 생성자/할당이있다. – super

+0

첫 번째 블록을 없애고 두 번째 블록을 제거 할 것을 제안합니다. char 배열은 문자열을 사용하지 말아야한다는 것을 강조합니다. 왜 두 번째 블록에서 그 주조를하는지 확신 할 수 없습니다. – Aziuth

+0

안녕하세요. 첫 번째 답변이 내 요구 사항을 충족 시켰습니다 ... 나중에 두 번째 사례도 시도해 보겠습니다. 이 아이디어 남자에게 고마워. – jackyone

관련 문제