c – 如何通过引用传递子字符串?

c – 如何通过引用传递子字符串?,第1张

概述我递归地调用一个函数作为参数传递一个子串,它始终从当前字符串的开头一直到一个位置.如果我使用C,我可以将指针传递给字符串的第一个位置,然后是必要的长度.不过,我想使用类字符串实现相同的结果.可能吗?如果我使用const,编译器是否足够聪明,可以自行进行优化?更好的是,有没有办法自行检查编译器是否实际复制了参数或传递了引用? 我的问题是在编写了下面的代码后得到了激励,该代码在poj上通过问题Alph 我递归地调用一个函数作为参数传递一个子串,它始终从当前字符串的开头一直到一个位置.如果我使用C,我可以将指针传递给字符串的第一个位置,然后是必要的长度.不过,我想使用类字符串实现相同的结果.可能吗?如果我使用const,编译器是否足够聪明,可以自行进行优化?更好的是,有没有办法自行检查编译器是否实际复制了参数或传递了引用?

我的问题是在编写了下面的代码后得到了激励,该代码在poj上通过问题Alphacode的测试,一旦有人使用atoi而不是atof.

#include <iostream>#include <algorithm>#include <map>#include <vector>#include <string>using namespace std;map<string,int> cache;bool valID_character_number(string a) {    return 0 < stoi(a.substr(a.size() - 2,2)) && stoi(a.substr(a.size() - 2,2)) <= 26;}bool zero_last_digit(string a) {    return a[a.size() - 1] == '0';}bool zero_before_last_digit(string a) {    return a[a.size() - 2] == '0';}int deCodings(string a) {    if (a.size() == 0)        return 1;    if (a.size() == 1) {        if (zero_last_digit(a))            return 0;        else            return 1;    }    if (cache.find(a) != cache.end())        return cache[a];    if (zero_last_digit(a) && valID_character_number(a))        return cache[a] = deCodings(a.substr(0,a.size() - 2));    else if (valID_character_number(a) && !zero_before_last_digit(a))        return cache[a] = deCodings(a.substr(0,a.size() - 1)) + deCodings(a.substr(0,a.size() - 2));    else        return cache[a] = deCodings(a.substr(0,a.size() - 1));}int main() {    string input;    while (true) {        cin >> input;        if (input.size() == 1 && stoi(input) == 0)            return 0;        cout << deCodings(input) << endl;    }    return 0;}
解决方法 你不能为此目的使用std :: string,但你可以很容易地创建一个自己的类,它将一对迭代器(开始和结束)保存到另一个字符串,或者C样式的char *和大小.使用C 11(因为您标记了它),您甚至应该能够创建用户定义的文字语法来创建新类型的字符串. 总结

以上是内存溢出为你收集整理的c – 如何通过引用传递子字符串?全部内容,希望文章能够帮你解决c – 如何通过引用传递子字符串?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1243613.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存