【发布时间】:2025-12-01 01:30:01
【问题描述】:
我正在尝试制作一个以特定方式修改单词的程序: 它应该首先检查单词的结尾,然后继续修改它们。我不会详细解释它,因为它在英语中没有多大意义。 我写了以下内容:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int main()
{
cout << "Por favor, introduzca los gentilicios separados por la tecla enter, para finalizar, escriba OK" << '\n';
string name[10];
string place[10];
for (int i(0); (i < 10); i++)
{
getline(cin, name[i]);
if (name[i] == "OK") //Error here
break;
}
for (int i(0); (i < 10); i++)
{
place[i] = name[i];
if (name[i][name[i].length() - 1] == 'c')
{
if (name[i][name[i].length()] == 'a' || (name[i][name[i].length()] == 'o') || (name[i][name[i].length()] == 'u'))
place[i][place[i].length() - 1] = 'q';
place[i][place[i].length()] = 'u';
place[i] = place[i] + "istan";
}
else if (name[i][name[i].length()] == 'a' || name[i][name[i].length()] == 'e' || name[i][name[i].length()] == 'i' || name[i][name[i].length()] == 'o' || name[i][name[i].length()] == 'u')
{
place[i][place[i].length()] = 'i';
place[i] = place[i] + "stan";
}
if (name[i][name[i].length()] == 's')
place[i] = place[i] + "tan";
else {
place[i] = place[i] + "istan";
}
place[i][0] = toupper(place[i][0]);
}
for (int i(0); (i < 10); i++)
{
cout << place[i] << '\n';
}
return 0;
}
现在我收到错误 "String subscript out of range" 。我想知道错误到底在哪里。我知道当我在第 18 行写“OK”时它会提示。
【问题讨论】:
-
这段代码有很多风格问题,可能是也可能不是问题的一部分。使用 C 数组(以及相关的
sizeof滥用)、“裸”指针和指针算术而不是其中的[]访问。此外,错误消息中的行号或整个错误消息(而不是转述的)会有所帮助。 -
*(p+ (name[i].length()-2))与p[name[i].length()-2]相同,与name[i + name[i].length() - 2]相同。
标签: c++ arrays string pointers char