我试图在阵列Bob中找到“空”,然后在我找到索引中的空白之后我想用“LEEROY JENKINS”替换“空”这个词请原谅我缺乏知识我仍然很新手,并尽我所能学习。
问题:
<?xml version="1.0"?>
<package>
<metadata>
<id>$rootnamespace$</id>
<version>$version$</version>
<title>$rootnamespace$</title>
<authors>$author$</authors>
<!--<iconUrl></iconUrl>-->
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$rootnamespace$</description>
<copyright>$copyright$</copyright>
<tags></tags>
</metadata>
</package>
答案 0 :(得分:2)
问题在于你构建循环的方式:
while (x[i] != "empty" && i < n)
{
tindex = i;
i++;
}
首先,i
为0. tindex
设置为0,i
设置为1。
然后循环重复,检查条件。哎呀! x [1]是&#34;空&#34;!循环结束,tindex
仍为0。
这就是为什么Q
为0以及为什么错误的元素被替换的原因。
此外,您在尝试使用i < n
(哎呀)之后检查x[i]
。
您也可以返回i
,因为这已经是您需要的值:
int spindex(string x[], int n)
{
int i = 0;
while (i < n && x[i] != "empty") {
i++;
}
return i;
}
在我看来,整个问题会更好地构建:
#include <string>
#include <algorithm>
#include <iostream>
int main()
{
std::string Bob[] = { "shaun", "empty", "tom", "empty", "chris", "sharon", "empty"};
auto it = std::find(std::begin(Bob), std::end(Bob), "empty");
if (it == std::end(Bob)) {
// No "empty" to replace!
return EXIT_FAILURE;
}
// Replace first "empty" with "BOB"
*it = "BOB";
// Here is our array now
std::cout << '[';
for (const auto el : Bob)
std::cout << el << ',';
std::cout << ']' << '\n';
}
// Output: [shaun,BOB,tom,empty,chris,sharon,empty,]
答案 1 :(得分:2)
此功能
int spindex(string x[], int n)
{
int i = 0;
int tindex;
while (x[i] != "empty" && i < n)
{
tindex = i;
i++;
}
return tindex;
}
错了。除非数组的第一个元素具有值"empty"
,否则该函数将返回包含该字符串的元素的索引之前的索引。
同样,while循环条件中子条件的顺序也是错误的。
按以下方式编写
size_t spindex( const std::string a[], size_t n )
{
size_t i = 0;
while ( i < n && a[i] != "empty" ) i++;
return i;
}
并将其称为
size_t Q = spindex( Bob, sizeof( Bob ) / sizeof( *Bob ) );
编写函数的更通用的方法看起来如下
size_t spindex( const std::string a[], size_t n, const std::string &s )
{
size_t i = 0;
while ( i < n && a[i] != s ) i++;
return i;
}
它可以被称为
size_t Q = spindex( Bob, sizeof( Bob ) / sizeof( *Bob ), "empty" );
作为替代方案,您可以使用标头std::find
中声明的标准算法<algorithm>
。