【问题标题】:Why is my string not printing in a function?为什么我的字符串没有在函数中打印?
【发布时间】:2021-11-23 14:26:33
【问题描述】:

代码如下:

#include<iostream>
using namespace std;

int lengthOfLastWord(string s) {
    int i,j,n=0;
    for(i=0;s[i]!=0;i++){
        n++;
    }
    string s1;
    for(i=n,j=0;s[i]!=' ';i--,j++){
        s1[j]=s[i];
    }
    cout<<s1;
};

int main(){
    string s;
    getline(cin,s);
    lengthOfLastWord(s);
}

字符串s1有什么问题?如果s1for 循环中,则s1 打印成功。

【问题讨论】:

  • 你应该把};改成}
  • 我改了,问题还是一样。

标签: c++ string


【解决方案1】:

首先,您的 lengthOfLastWord() 函数不会返回任何内容,因此其返回类型应为 void

void lengthOfLastWord(string const& s) {
    //                       ^^^^^^ Preferably use const reference here to avoid making unnecessary copies at each invocation to 'lengthOfLastWord()'
    /* ... */
}

现在,真正的问题是您在使用s1[j] 访问它之前从未初始化s1,这会导致未定义的行为

所以,要解决您的问题,只需替换此行:

string s1;

用这个:

string s1(n, '\0');

Demo


或者,您可以使用std::string::push_back()

// ...
string s1;
for(i = n; s[i] != ' '; i--)
    s1.push_back(s[i]);
cout << s1;

Demo using std::string::push_back

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 2021-03-06
    • 2021-12-13
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    相关资源
    最近更新 更多