Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 字符串函数-将单数转换为复数_C++_String - Fatal编程技术网

C++ 字符串函数-将单数转换为复数

C++ 字符串函数-将单数转换为复数,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

我在写一个函数把名词变成复数 除了以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(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哦,很抱歉。