C++ 代码未打印第二个字符数组C++;
基本上,我的奋斗目标是交换每个字符串的第一个字母并打印它。除了我的代码不会打印B外,其他一切似乎都正常。我意识到我需要将[0]存储到临时变量中,以便在存储到B[0]中之前不会被覆盖。出于某种原因,当我运行代码(在站点编译器中)时,它只会打印“ebcd”。即使我告诉它,它也不会打印BC++ 代码未打印第二个字符数组C++;,c++,arrays,C++,Arrays,基本上,我的奋斗目标是交换每个字符串的第一个字母并打印它。除了我的代码不会打印B外,其他一切似乎都正常。我意识到我需要将[0]存储到临时变量中,以便在存储到B[0]中之前不会被覆盖。出于某种原因,当我运行代码(在站点编译器中)时,它只会打印“ebcd”。即使我告诉它,它也不会打印B #include <iostream> #include <string> #include <bits/stdc++.h> using namespace std; void
#include <iostream>
#include <string>
#include <bits/stdc++.h>
using namespace std;
void wordSize(string a, string b){
int lenA = a.size();
int lenB = b.size();
cout << lenA << " " << lenB << endl;
}
void firstLetterSwap(string a, string b){
int sizeA = a.size();
int sizeB = b.size();
char temp;
char* A = new char[sizeA];
char* B = new char[sizeB];
strcpy(A, a.c_str());
strcpy(B, b.c_str());
A[0] = temp;
A[0] = B[0];
B[0] = temp;
cout << A << " " << B << endl;
}
int main() {
string a, b;
cin >> a;
cin >> b;
wordSize(a, b);
cout << a + b << endl;
firstLetterSwap(a, b);
return 0;
}
#包括
#包括
#包括
使用名称空间std;
无效字号(字符串a、字符串b){
int lenA=a.size();
int lenB=b.size();
cout您可以使用std::swap
from
您必须通过引用传递字符串,否则调用者将看不到更改。至于交换,有一个函数用于此
void firstLetterSwap( std::string& a, std::string& b){
std::swap(a[0], b[0];
// and that's all, folks
}
我在您的firstLetterSwap
实现中发现以下问题
您是按值获取参数的。无论您在函数中对参数做了什么,调用函数中的变量都不会受到影响。如果希望对函数中变量所做的更改在调用函数中可见,则需要通过引用传递它们
您没有对函数中的参数进行任何更改。您正在复制输入参数并对副本进行更改
在调用strcpy
std::string::size
之前,没有为A
和B
分配足够的空间。因此,new char[sizeA]
将分配内存,该内存可以容纳比您需要的少一个字符。因此,您的程序具有未定义的行为
动态分配的内存未解除分配。对new
/new[]
的每次调用都应伴随相应的delete
/delete[]
最简单的修复方法是使用:
void firstLetterSwap(std::string& a, std::string& b)
{
std::swap(a[0], b[0];
}
#include
-不要这样做,它不聪明,也不可移植。为什么你觉得需要混合使用C样式字符串和std::string,或者显式地动态分配任何内容?支持@NeilButterworth注释的信息。firstLetterSwap
中的所有代码都是不必要的。你需要的是std::swap(a[ 0 ],b(0)];<代码> < <代码> < <代码> >要求<代码>删除>代码>。所以不要使用<代码>新< /C> >,并且不能忘记“删除”。我强烈建议您继续阅读一些C或C++基础书籍,最好是C。
void firstLetterSwap( std::string& a, std::string& b){
std::swap(a[0], b[0];
// and that's all, folks
}
void firstLetterSwap(std::string& a, std::string& b)
{
std::swap(a[0], b[0];
}