C++ 字符串函数-将单数转换为复数
我在写一个函数把名词变成复数 除了以y结尾的单词外,所有条件都很有效 它应该像输入:苍蝇输出:苍蝇一样工作 但结果是:flisC++ 字符串函数-将单数转换为复数,c++,string,C++,String,我在写一个函数把名词变成复数 除了以y结尾的单词外,所有条件都很有效 它应该像输入:苍蝇输出:苍蝇一样工作 但结果是:flis #include <iostream> #include <fstream> using namespace std; void change_to_plural(char* input_string, char* output_string) // changing to plural { int n; n = strlen
#include <iostream>
#include <fstream>
using namespace std;
void change_to_plural(char* input_string, char* output_string) // changing to plural
{
int n;
n = strlen(input_string);
if (input_string[n - 1] == 'y') //ends with y
{
input_string[n + 2] = '\0';
input_string[n - 1] = 'i';
input_string[n] = 'e';
input_string[n + 1] = 's';
}
if (input_string[n - 1] == 's' || ((input_string[n - 2] == 's') && (input_string[n - 1] == 'h'))) // ends with s or sh
{
input_string[n] = 'e';
input_string[n + 1] = 's';
input_string[n + 2] = '\0';
}
else //other cases
{
input_string[n] = 's';
input_string[n + 1] = '\0';
}
output_string = input_string;
n = strlen(input_string);
for (int i = 0; i < n; i++)
cout << output_string[i];
}
void main() {
char in[10], out[10];
int k;
cout << "How many words would you like to try ? ";
cin >> k;
for (int i = 0; i < k; i++)
{
cout << "Please enter a word : ";
cin >> in;
cout << "Its plural is : ";
change_to_plural(in, out);
cout << endl;
}
cout << endl;
}
运行样本
若该声明在缺失的地方添加了所有caps注释,那个么您将丢失其他内容,希望您注意到它。因此,由于这个原因,它仍然会转到其他案例分支
if (input_string[n - 1] == 'y') //ends with y
{
input_string[n + 2] = '\0';
input_string[n - 1] = 'i';
input_string[n] = 'e';
input_string[n + 1] = 's';
}
// MISSING ELSE HERE!!!!
else if (input_string[n - 1] == 's' || ((input_string[n - 2] == 's') && (input_string[n - 1] == 'h'))) // ends with s or sh
{
input_string[n] = 'e';
input_string[n + 1] = 's';
input_string[n + 2] = '\0';
}
else //other cases
{
input_string[n] = 's';
input_string[n + 1] = '\0';
}
您确定没有访问超出边界的输入字符串吗?您使用的是std::string还是C char数组字符串?@BaummitAugen是的。你可以将它复制到你最喜欢的IDE中,编译它,它会立即重现这个问题。@AlgirdasPreidžius我写评论时不是这样的。您可以通过单击帖子正文下方编辑的XXX time ago链接查看帖子的更改时间和方式。@BaummitAugen对此表示抱歉。我假设代码是按现在的样子发布的。我的错,但在你的下面还有一个wrote@Trix在他的更正版本中,是的,但不是在你的错误版本中。@Trix,它出现在我的帖子中,因为我在那里添加了它。它不在你原来的代码片段中。@BaummitAugen哦,很抱歉。