2017-04-09 73 views
-3

我正在爲學校實驗室工作。最後一個練習的目標是製作一個程序,可以掃描用戶輸入的字符串,查找任何遭受「capslock syndrome」(即以小寫字母開頭且全部大寫字母,IHI tHIS)的單詞。這是我到目前爲止有:如何在C++中的字符串中打印從一個索引到另一個索引的字符範圍

#include<iostream> 
#include<string> 
#include<cctype> 
using namespace std; 

int main() 
{ 
string s(""); 
int len; 

do 
{ 
    cout<<"Enter a string. I will check it for \"caps-lock syndrome\"\n"; 
    getline(cin, s); 
    cout<<endl; 
    cout<<s<<"\n\n"; 

    len = s.length(); 

    for(int i=0; i<len; i++){ 
     if(islower(s[i])){ 
      for(int j=i+1; j<len; j++){ 
       if(isupper(s[j])){ 
        cout<<s[j]; 
       } 
      } 
     } 
    } 

} while(!s.empty()); 

return 0; 
} 

發生的事情是當用戶輸入像串「大寫鎖定」輸出結果應該是: CAPS LOCK

然後循環回到程序的開始。我現在得到的問題是我無法打印完整的單詞(只是大寫字母),而且我無法讓每個單詞像我想要的那樣打印到自己的行中。

+0

當輸入諸如'喜歡tHIS'給出輸出什麼,你期待什麼呢? – Shibli

+0

預期的順序應該是用戶輸入一個字符串,程序將掃描任何以小寫字母開頭並且後面都帶有大寫字母的單詞,並在屏幕上顯示違規單詞。因此,如果我輸入了一個字符串「cAPS lOCK is on」,輸出應該是:cAPS lOCK(每個字在它自己的行上)。我遇到的問題是,我無法弄清楚如何打印整個單詞,我無法讓它們在單獨的行上輸出。 –

+0

用'std :: stringstream' [與此處的選項2類似](http://stackoverflow.com/a/7868998/4581301)將行分成單詞,然後單獨掃描單詞。這樣,你只需要把這個單詞的第一個字母看作更低。減少了附加功能。 – user4581301

回答

0

這裏是代碼,可以幫助你:

string the_string = "hELLO hOW aRE yOU"; 
vector<string>v; 
string new_string = ""; 
for (int i = 0; i < the_string.length(); i++) 
{ 
    if (the_string[i] != ' ') 
    { 
     new_string += the_string[i]; 
    } 
    else 
    { 
     v.push_back(new_string); 
     new_string = ""; 
    } 
} 
//Now, the string vector is loaded 

for(int i = 0; i < v.size(); i++) 
{ 
    if (islower(v[i][0])) 
    { 
    int counter = 0; 
    for (int b = 1; b < v[i].length(); b++) 
    { 
     if (isupper(v[i][b])) 
     { 
      counter += 1; 
     } 
    } 
    if (counter == v[i].length()-1) 
    { 
     cout << v[i]<< " has caps lock syndrome"<< endl; 

    } 
    else 
    { 
     cout << v[i] << " does not have caps lock syndrome"<< endl; 

    } 
    } 
    else 
    { 
     cout << v[i]<< " does not have caps lock syndrome"<< endl; 
    } 
}  
相關問題