C++ 在字符串中查找中间词

C++ 在字符串中查找中间词,c++,C++,正如标题所示,我在试图从字符串中提取中间词时遇到了困难,我相信我的公式是错误的,但我不完全确定从这里到哪里解决这个问题,任何帮助都非常感谢谢谢 #include <iostream> #include <algorithm> using namespace std; int main() { string sentence=""; string middle=""; string midtemp=&

正如标题所示,我在试图从字符串中提取中间词时遇到了困难,我相信我的公式是错误的,但我不完全确定从这里到哪里解决这个问题,任何帮助都非常感谢谢谢

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
     string sentence="";
     string middle="";
     string midtemp="";
     int count=0;
     int mid=0;

     cout << "Enter a sentence:" << endl;
    getline(cin,sentence); //gets user input

   
  for(int count =0; count<sentence.length();count++){
       letter=sentence.substr(count,1);

        int mid = sentence.length();
        if (midtemp.length()>middle.length())
           { midtemp=middle;}
         if (sentence[count]!=' ')
           { if(mid%2==0);
           reverse(longest.rbegin(),longest.rend()); //shows the word not backwards
           cout<<"Middle word is: " << sentence.substr(mid/2 -1) <<"\n" << endl;
           break; //presents info to user
           }
        else(mid%2!=0);
        { mid/2;
             cout<<"Middle word is: " << sentence.substr(mid/2 -1) <<"\n" << endl;
           break; //presents info to user if number is even
        }
       }
#包括
#包括
使用名称空间std;
int main()
{
字符串句子=”;
字符串中间=”;
字符串midtemp=“”;
整数计数=0;
int-mid=0;

cout要在包含三个单词的字符串中找到中间的单词,请使用:

size\u t begin\u index=句子。查找(“”)+1;
大小\u t结束\u索引=句子。查找(“”,开始\u索引);
长度=结束索引-开始索引;
字符串中间单词=句子.substr(开始索引,长度);

要查找包含任意奇数个单词的字符串中的中间单词,请使用:

//从句子创建字符串流
istringstream ss(句子);
//将字符串流拆分为单词向量
向量词(istream_迭代器(ss),{});
//获取中间索引
size\u t middle\u index=(words.size()-1)/2;
//中间词
const auto&middle_word=单词[middle_index];
如果单词数为偶数,则结果要么向上舍入,要么向下舍入,直到C++11,在C++11之后向下舍入。(到中间空格之前的单词)。

\include
#包括
#包括
使用名称空间std;
int main(int argc,字符**argv){
字符串输入;
getline(cin,输入);
向量标记;
字符串标记;
对于(size_t i=0;i问题中不能包括输入、输出和预期输出。字符串中的中间词是什么?例如,
“Hello World”
中的中间词是什么?我不相信代码是有效的,它不是一个错误的公式,只是一个错误的算法(以及许多编码错误)。解决复杂问题的方法是将其分解为若干部分。因此,请尝试以下步骤,第一步将句子分解为单词。第一步之后,您将有一个字符串向量,每个字符串都是一个单词。第二步从向量中选择中间的条目。现在您有两个问题而不是一个问题,但每个问题都比原始问题简单。是的,对不起关于这篇糟糕的帖子,我已经放弃了这段代码,正在重新启动,不过谢谢你的帮助!问题陈述中没有任何内容说必须有三个词。你当然可能是对的,OP漏掉了那个重要的细节。你是对的,如果有五个词,就有一个中间词,我从来没有想过,让我重新思考一下“结果要么向上舍入,要么向下舍入,直到C++11”。真的吗?C++11中发生了什么变化?我认为它应该一直向下舍入。“二进制运算符/将第一个操作数除以第二个操作数(在通常的算术转换之后)。对于整数操作数,它生成代数商。商按实现定义的方向舍入。(直到C++11)。商被截断为零(小数部分被丢弃)。(从C++11开始)`。”-
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main(int argc, char **argv) {
  string input;
  getline(cin, input);

  vector<string> tokens;

  string token;
  for (size_t i = 0; i < input.length(); i++) {
    char c = input[i];
    if (c == ' ' || !input[i + 1]) {
      if (!input[i + 1])
        token += c;
      tokens.push_back(token);
      token = "";
      continue;
    }
    token += c;
  }

  auto mid = tokens.size() % 2 == 0 ? tokens.begin() + tokens.size() / 2 - 1
                                    : tokens.begin() + tokens.size() / 2;
  cout << *mid;

  return 0;
}