#include <iostream>
#include <string>
using namespace std;
string change(string a[10]){
string b;
for(int i = 0; i < 10; i++){
b[i] = a[i] + 1;
}
return b;
}
int main() {
string a = "hello";
cout << change(a);
return 0;
}
我在代码中找不到任何错误。 我该如何使用定长字符串作为函数的输入?
b[i] = a[i] + 1;
错误:无法在赋值中将 'std::string' {aka 'std::__cxx11::basic_string'} 转换为 '__gnu_cxx::__alloc_traitsstd::allocatorcout << change(a);
错误:无法将 'std::string' {aka 'std::__cxx11::basic_string'} 转换为 'std::string*' {aka 'std::__cxx11::basic_string*'}
这个
string change(string a[10])
很奇特/令人困惑/有历史动机/无论你怎么称呼它的写作方式
string change(string* a)
您的函数采用指向
std::string
的指针作为参数。数组大小只是装饰性的。任何大小的数组都可以传递给该函数,它将衰减为指向其第一个元素的指针。这是将 c 样式数组传递给函数的一种方法。这不是将数组传递给函数的首选方法(您可以使用例如 std::array
代替)。
此外,您的代码中没有“固定长度”字符串。
std::string
具有动态大小。对于固定长度的字符串,您可以使用 std::array<char,10>
(尽管这不适合 "Hello"
,它只有 6 个字符,5 + 终止符)。
要产生预期的输出,您的函数可以是这样的:
std::string change(std::string a){
// no need to make another copy
for(auto& c : a){ // use range based for loop when possible
a[i] += 1;
}
return a;
}