2017-04-09 50 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; 
    } 
}  
相关问题