C++ 为什么调用函数后会陷入无限循环?
我应该创建一个接收两个参数的函数:一个句子(C++ 为什么调用函数后会陷入无限循环?,c++,c++11,infinite-loop,palindrome,C++,C++11,Infinite Loop,Palindrome,我应该创建一个接收两个参数的函数:一个句子(std::string)和一堆短语(std::vector>)。现在,对于向量中包含的句子中的所有单词,我需要使它们成为回文,并将它们粘在一起,例如compile->compileelipmoc。 我还需要确保输入在按下两个ENTER键之前是可用的。 问题发生在调用函数之后,我似乎陷入了无限循环。 为什么我会得到这个无限循环 #include <iostream> #include <vector> #include <s
std::string
)和一堆短语(std::vector>
)。现在,对于向量中包含的句子中的所有单词,我需要使它们成为回文,并将它们粘在一起,例如compile->compileelipmoc。
我还需要确保输入在按下两个ENTER键之前是可用的。
问题发生在调用函数之后,我似乎陷入了无限循环。
为什么我会得到这个无限循环
#include <iostream>
#include <vector>
#include <string>
typedef std::vector<std::string> Vektor;
typedef std::string String;
void ReverseString(String &s1)
{
char temp(0);
for(int i(0); i < s1.size()/2; i++) {
temp = s1.at(i);
s1.at(i) = s1.at(s1.length()-1-i);
s1.at(s1.length()-1-i) = temp;
}
}
void CreatePalindrome(String s, Vektor v)
{
bool white_space(true);
bool go_on(false);
String compare;
for(int i(0); i < s.size(); i++) {
for(;;) {
if(s.at(i) == '\n' || i == s.size()-1) {
go_on == true;
break;
}
compare+=s.at(i);
}
if(go_on) {
for(int j(0); j < v.size(); j++) {
if(compare == v.at(j)) {
ReverseString(v.at(j));
if(i != s.size()-1) v.at(j)+=' ';
s.insert(i, v.at(j));
}
}
}
compare.clear();
}
}
int main ()
{
String sentence, phrase;
Vektor v1;
char character(0);
std::cout << "Enter your sentence: ";
std::getline(std::cin, sentence);
std::cout << "Enter phrases: ";
for(;;) {
character = std::cin.get();
if(character == '\n') break;
for(;;) {
phrase.push_back(character);
character = std::cin.get();
if(character == '\n') break;
}
v1.push_back(phrase);
phrase.clear();
}
CreatePalindrome(sentence, v1);
std::cout << "After the transformation, the sentence is: " << sentence;
return 0;
}
#包括
#包括
#包括
typedef std::向量向量向量机;
typedef std::string字符串;
无效反向限制(字符串和s1)
{
字符温度(0);
for(int i(0);i 你唯一的出路是通过if
,但是你在循环中既不修改s
也不修改i
,所以你永远不会中断!for(;){if(s.at(i)='\n'| i==s.size()-1){break;}
无论是s
还是i
在这个循环中都没有改变,而这个条件是你唯一的出路……那么你希望如何打破这个循环呢?就是这样,它根本没有反转这个词,但这是一个完全不同的问题。谢谢。我添加了新的intk(i)
并用s.at(i)
替换了s.at(i)
(k)
,以及其他类似内容。谢谢!
for(;;) {
if(s.at(i) == '\n' || i == s.size()-1) {
go_on == true;
break;
}
compare+=s.at(i);
}