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;
}