2016-11-03 2 views
0

"if, for 루프"또는 첫 번째 및 두 번째 문자열을 검색 할 수있는 방법이 있으며 세 번째 문자열을 검색 할 문자열이없는 경우?여러 문자열 :: 찾기

나는이 세 가지로 붙어있다. 어떻게 든 첫 번째와 두 번째에 문자열 "aba"가 있는지 확인해야하지만 세 번째 문자열에서 "aba"를 확인하지 않으면됩니다. 몇 가지 아이디어? 미리 Tnx.

#include <iostream> 
#include <string.h> 

using namespace std; 

int main() { 

string s1, s2, s3; 
string aba = "aba"; 


cout << "Input s1, s2: "; 
cin >> s1; 
cin >> s2; 

s3 = s1 + s2; 

cout << "String s3 is: " << s3; 

cout << "\n\n****************************\n"; 

size_t found = s1.find(aba); 
if(found!=string::npos){  
    cout << "Have for s1."; 
} 

size_t found1 = s2.find(aba); 
if(found1!=string::npos){ 
    cout << "Have for s2."; 
} 

size_t found2 = s3.find(aba); 
if(found2!=string::npos){ 
    cout << "Have for s3."; 
} 


} 
+2

종이를 꺼냅니다. 이 작업을 수행하기 위해 제안하는 논리적 알고리즘을 간단하고 짧고 논리적 인 단계로 기록하십시오. "첫 번째 문자열 검색. 찾으면이를 수행하십시오. 그렇지 않으면 다음을 수행하십시오." 등등. [귀하의 고무 오리와 논리를 적어 놓고 토론하십시오] (https://en.wikipedia.org/wiki/Rubber_duck_debugging). 고무 오리가 작동한다는 데 동의하면 간단히 논리적 인 과정을 C++로 직접 변환하십시오. 임무 완수. –

+0

아마도 '&&'연산자 만 있으면 될까요? – johnchen902

+0

@ johnchen902 문제는 이미 IF 루프를 사용하고 있기 때문에 어떤 루프를 사용할 지 모르지만 다시 사용할 수 없습니까? 나는 잃어버린 하하 ... – Beansolder

답변

2

가장 무슨 뜻인지 모르겠지만, 당신의 변수 이름을 유지하지,이 약간 청소기 IMHO입니다.

if((found != string::npos) && (found1 != string::npos)) 
{ 
    cout << "There is for s1 i s2.\n"; 
} 
else 
{ 
    cout << "Don't have for s1 i s2, search in s3.\n"; 
    if(found2 != string::npos) 
    { 
     cout << "There is for s3.\n"; 
    } 
    else 
    { 
     cout << "Don't have for s3.\n"; 
    } 
} 

& & 연산자 것 short-circuit 및 코드 스트링의 더 반복이 없다. 문자열을 변경해야하는 경우 (장난감 예제처럼 보이지만 의심 스럽지만) 한 곳에서만이 문자열을 사용할 수 있습니다 (DRY principle의 작은 응용 프로그램).

+0

Tnx, 이것은 깨끗하고 멋지게 보입니다. 내 모든 것이 엉망이지만 작동합니다.^_ ^ – Beansolder

0

마침내 그랬지만 이것이 가장 좋은 방법일까요?

if(found != string::npos){ 
    if(found1 != string::npos){ 
     cout << "\nThere is for s1 i s2."; 
    } else { 
     cout << "\nDon't have for s1 i s2, search in s3."; 
     if(found2 != string::npos){ 
      cout << "\nThere is for s3."; 
     } else { 
      cout << "\nDon't have for s3."; 
     } 
    } 
} else { 
    cout << "\nDon't have for s1 i s2, search in s3."; 
    if(found2 != string::npos){ 
      cout << "\nThere is for s3."; 
     } else { 
      cout << "\nDon't have for s3."; 
     } 
}