gpt4 book ai didi

c++ - 字符串未由C++打印

转载 作者:行者123 更新时间:2023-12-01 15:13:21 25 4
gpt4 key购买 nike

抱歉,菜鸟问题,我是新手程序员,正在从C过渡到C++。
我可以很容易地编写一个程序,以较小的更改以相同的方式用C反转字符串,但是用C++编写,为什么这样不显示任何内容:

#include <iostream>
#include <string>

using namespace std;

int main(){
string s,p;
getline(cin,s);
int j=0,i = 0;
while(s[i]!='\0'){
i++;
}
i--;
while(i!=-1){
p[j] = s[i];
j++;
i--;
}
cout << p << endl;
return 0;
}

如果我将p替换为p [2],它会正确打印出原始字符串的第3个反向字符,但是我找不到打印整个字符串的方法。

最佳答案

要修复您的字符串反向代码,您只需resize字符串对象p:


int main(){
std::string s = "hello",
p;
p.resize(s.size()); // this was causing your problems, p thought it was size 0

for (int i = s.size() - 1, j = 0; i >= 0; i--, j++)
{
p[j] = s[i];
}

std::cout << p << std::endl;
return 0;
}


除此之外,无需在字符串中找到 \0,尽管它会存在于其中,您只需询问 std::stringsize()是什么。

顺便说一句,虽然 std::string可能默认情况下会分配一些内存,但前提是假定它有足够的空间来存储您输入的所有内容,这将是未定义的行为。

关于c++ - 字符串未由C++打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60843905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com