我正在尝试编写一个程序,当给出输入时,会吐出多少个单词连字符,以及有多少单词在引号中。一些样本输入和输出如下:
输入句子:
乔喜欢准科幻书籍如“黑暗的左手”和 “怪人”
带连字符的单词:
1
在引号词
5
输入句子:
“插口是快乐”
带连字符的单词:
0
在引号单词:
3
输入句子:
这是一个“连字符字”在引号
带连字符的单词:
1
在引号单词:
1
到目前为止,我一直无法使用它,并且我不确定我的方法是否正确。这是我到目前为止所写的内容:
#include <iostream>
#include <string>
using namespace std;
int main(){
string inistr, substr, quotestr;
getline(cin, inistr);
int hyphen=0, firstQuote, quote=0, firstHyphen;
while(inistr.length() > 0){
if(inistr.find_first_of('"') == string::npos && inistr.find_first_of('-') == string::npos){
inistr = "";
}
else if((inistr.find_first_of('"') != string::npos && inistr.find_first_of('-') == string::npos) || (inistr.find_first_of('"') != string::npos && (inistr.find_first_of('-')>inistr.find_first_of('"')))){
firstQuote = inistr.find("\"");
substr = inistr.substr(inistr.find_first_of("\""), inistr.find("\"",firstQuote + 1)+1);
inistr = inistr.substr(inistr.find("\"",firstQuote+1)+1);
if(substr.find_first_of("-") != string::npos){
hyphen++;
quote++;
}
if(substr.find(' ') == string::npos && substr.find("-") == string::npos){
quote = 1;
}
else if(substr.find(' ') != string::npos){
quote = 1;
for(unsigned int i = 0; i < substr.length(); i++){
if(substr.at(i) == ' '){
quote++;
}
}
}
}
else if((inistr.find_first_of('-') != string::npos && inistr.find_first_of('"') == string::npos) || (inistr.find_first_of('-') != string::npos && (inistr.find_first_of('"')>inistr.find_first_of('-')))){
firstHyphen = inistr.find_first_of('-');
substr = inistr.substr(firstHyphen, inistr.find(' ', firstHyphen + 1));
inistr = inistr.substr(inistr.find(substr) + substr.length(), ' ');
hyphen++;
}
}
cout << "Words with hyphens:" << hyphen << endl;
cout << "Words in quotes:" << quote << endl;
return 0;
}
这是我在第一个例子中得到的输出。
乔喜欢像“黑暗的左手”和“科学怪人”这样的科幻书籍带连字符的单词:1
引号中的单词:3