如何解决C ++我不知道如何在字符串句子中找到一个词例如香蕉,三明治用户输入句子然后写出那个词
我已经尝试过这个,但老实说我被卡住了。
我正在尝试找到第一个字符,然后搜索该子字符串的结尾(例如,如果单词是“三明治”并且它找到了 's',则它认为它是“三明治”),然后写出三明治这个词。我也是 C++ 新手。
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s,word;
char a;
cout << "Enter the sentence that you desire: ";
getline(cin,s);
cout << "Enter the letter that you want: ";
cin >> a;
for (int i = 0; i < s.length; i++)
{
if (s[i] == a)
{
if (s[i] == '\0')
{
word = s;
cout << word;
}
}
}
return 0;
}
解决方法
请求有点模糊,但考虑到您发布的代码,我想我知道您打算做什么。
最简单的(但不一定是性能最好的)是使用字符串流,更准确地说是 istringstream。 你基本上是用一个字符串(你从键盘传递过来的)构建它,然后你就好像它是你的 cin 一样使用它(它充当规范化的 istream)。
此时您可以迭代句子的每个单词并检查第一个字母。 字符串的第一个字符是 myString[0] 或 myString.front()。这取决于你。
代码应该是这样的:
#include <iostream> //cin/cout
#include <sstream> //istringstream
using namespace std ;
int main()
{
//first of all let's get our sentence AND the character you want
cout << "insert sentence here: " ;
string sentence ;
getline(cin,sentence) ;
cout << "insert the character here: " ;
char letter ;
cin >> letter ;
//then let's create an istringstream with said sentence
istringstream sentenceStream(sentence) ;
//let's then iterate over each word
string word ;
while(sentenceStream >> word)
{
//and see if the word starts with the letter we passed by keyboard
if(word.front() == letter)
{
cout << "the word \"" << word << "\" starts with '" << letter << "'\n" ;
}
}
return 0 ;
}
只是一些提示:
-
iostream 已经包含字符串,不需要重新包含它。 [编辑](正如 whozcraig 所指出的,这不符合标准。无论如何,守卫都会“否定”双重包含,所以是的,包括字符串不是错误。如评论中所指定,我是尚未找到不包含字符串的 iostream 实现)[/Edit]
-
最好不要调用变量“s”或“a”:使用名称 这使它易于识别。
您可以使用 std::find_if
找到单词的结尾:
#include <algorithm>
#include <string>
template <typename Is>
std::string find_word(Is& stream,char needle) {
auto const nonword = [](char c) {
if ('a' <= c && c <= 'z') return false;
if ('A' <= c && c <= 'Z') return false;
if (c == '-') return false;
return true;
};
for (std::string w; stream >> w;) {
if (w.size() && w[0] == needle) {
auto const last = std::find_if(std::begin(w),std::end(w),nonword);
return std::string(std::begin(w),last);
}
}
return "";
}
这需要任何流作为参数,包括 std::cin
,并且可以这样调用:
std::cout << find_word(std::cin,'w') << "\n";
明确地找到流传递给您的每个块中的最后一个字符很重要,因为默认情况下流只会沿着空白切割。所以如果你输入一个句子:
Hello world!
您希望单词的结尾是 'd'
,而不是 '!'
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。