有三个整数xxz,设置三个指针变量p1p2p3,分别指向x&。然后通过指针变量使xY.z,三个变量交换顺序,即原来x的值给y,把y的值给z,z的值给x。x,y,z的原值由键盘输入,要求输出x,y,z的原值 和新值
时间: 2024-03-11 19:50:30 浏览: 100
好的,我理解了你的问题。下面是实现交换的 C++ 代码示例:
```c++
#include <iostream>
int main() {
int x, y, z;
std::cin >> x >> y >> z;
int *p1 = &x, *p2 = &y, *p3 = &z;
int temp = *p1;
*p1 = *p2;
*p2 = *p3;
*p3 = temp;
std::cout << "原值为:" << x << " " << y << " " << z << std::endl;
std::cout << "新值为:" << *p1 << " " << *p2 << " " << *p3 << std::endl;
return 0;
}
```
这段代码中,我们首先定义了三个整数变量 `x`、`y`、`z`,并通过 `std::cin` 从键盘读入它们的值。然后,我们定义了三个指针变量 `p1`、`p2`、`p3`,分别指向 `x`、`y`、`z`。接着,我们利用指针变量完成了三个变量的值的交换,最后通过 `std::cout` 输出了原值和新值。
注意:这里交换的是指针所指向的变量的值,而非交换指针本身的值。
相关问题
H4sIAAAAAAAAAO1YS2/bRhD+Kwblo0XzsXxIN8F2GgN2asR2e6gLYkUuzY1ILrFcSlACA+qhaHtpDi0KFOm1l556aIuiyJ/RwS76LzrLhy3ZUmwjbZAY0kXk7Mzuzsz3fUvysxeKJzj2Bx4NlK6pIYR0yzA3FEETonR120WuYbqWriEDjOMMjEoZoGwoAc0FTX1RxioGwmZomMh3+m4Qaj444JSl44QV+VKPmPaV7gtlHf69hIiIST+fBQTG1stBpZcGnEF8ZfCGhOeUpTBgqYZqSTPOshkzUpHqNt4BEZjG5ZyJmpM0ZzwPsMAqTnE8FtTP4aqcX82Dgdrr5zI5cVh5boNn72C31Soz3hmSVOymgnCIbbUW+6rP8BC3WjqyLeVsQyEyBpZPMuFV1xtKxllGuKAkL1PPfU5I6kWEnkbg6uoa7J3ld848xbJTyv7BETqWtoAMqU+WVnw9gerKiuwX+4W873OogFztyfbTj3e3lXL1mcVsVVP1N5RZIuU5S4nHwjAnkEEbuTKFBKdFCPUpOOHg/2TnaKd3uCMj6oxHNBARYAwhbVGz5XJlEkmiyu5BCYc4l/WLsQgZT7wajlt7B2u9LIMRmnsxO6WwPcELAuiSN14Wyd2lRQK+HauDNMvQHMftVK0IPJrmFYR1XXeR3rFsG+mwgRENaTPTekrEiPFBs+anu492lXqBrZhWTe6BxceCnDI+htvHLJEwjnG/rPehwIA3yQpfVCU8wv21PuYnm9PJZDr5Yzr5cjr5cTr5azr5czp5NZ18D9eyEpCWH+E0JbHn4zjuS7rWwApxnMvtNeNN89OQwQJ6A50b1IIpQ8oh7wCP61kArV4YF3nkzXPftizTPduYEwrXtl3HdszOTaHQTe2dCQUuBDuq1/jP1YKOIhwTP2ZFILGHCrWgagQ9VfcxTXvQxCEV41b5m6X6OmARIFFuakX1B0P1dRKTBDpcbZQDFRkcBaWgXw41pq5yC6ObgHqJ5giCMp0SoT4lkDYdkj08ZoWYKWPd/7ujs2qaiOdQs5xCb6kKhmbbhmlDvW/KgmmhBywLMJCwVN0q/94sDZ9QMjos27nShwelD5yEhFcJ3o+gBb8/tu4hCkvj/2dhoAGAnl5iu74dg0iyAa1BqbsucizT7ziahdtax7YC2w1DbOu4bSHHtfp6v420TsfQ2le+vm4akla36seMOoDDs3zp49A8p3TVMFRzGc7PbtB2GewX0nkh4ocgChnj4spXvoNdmWvvatrr2SzaOPCCQLtAacOQ+l7OCg5CUCP271e/XXz788XvX/zz1csZ55xg7kfegIwB3rI6Fz/9cv7yh/Ovfz2fvPbqoG++O389mQmaQf01ElxBOxIi655snmwCJv04k9CsaJx0Xc3WTjZbJ5tx4Q+2OR59REOxB32to70My8SVk81riF1Da8dLkDlrrbBZE7fZnBexXNQ7vK6u74OMLpfLpUJ4F4V6J2J5dpdT+9pzwOXxmOFTIjGv3Hh+MFEHoD/zrNG2QC1MzZWvIF407nMaeJHVJLBSpiq1igRDmtOGCoqhGWZbs9qGuaajrul0TVO1DEPOWXlfo3Bl7HM2yoE5MU5PC+gSDD6P2n560wPeRHkpgsrx0aO2e+VwNy2qfO8hRfcBHFQnpDGB6YXHUp8swJll2HM4s1wdUONYK5Stzr8P9vxrzKsD8MM9AC1zXph0G5TGMZFjr6RpJU23S9McmGehvERC3k66FijVSmjeH6GRH6EeU3GAi8EiqUHOnNSAypjys55xL6XpnH3+L4jsCGheHAAA对这个字符串进行解码时,使用了URLDecoder.decode,然后使用了Base64.getDecoder().decode()方法,出现Caused by: java.lang.IllegalArgumentException: Illegal base64 character 20
这个问题的原因是因为H4sIAAAAAAAAAO1YS2/bRhD+Kwblo0XzsXxIN8F2GgN2asR2e6gLYkUuzY1ILrFcSlACA+qhaHtpDi0KFOm1l556aIuiyJ/RwS76LzrLhy3ZUmwjbZAY0kXk7Mzuzsz3fUvysxeKJzj2Bx4NlK6pIYR0yzA3FEETonR120WuYbqWriEDjOMMjEoZoGwoAc0FTX1RxioGwmZomMh3+m4Qaj444JSl44QV+VKPmPaV7gtlHf69hIiIST+fBQTG1stBpZcGnEF8ZfCGhOeUpTBgqYZqSTPOshkzUpHqNt4BEZjG5ZyJmpM0ZzwPsMAqTnE8FtTP4aqcX82Dgdrr5zI5cVh5boNn72C31Soz3hmSVOymgnCIbbUW+6rP8BC3WjqyLeVsQyEyBpZPMuFV1xtKxllGuKAkL1PPfU5I6kWEnkbg6uoa7J3ld848xbJTyv7BETqWtoAMqU+WVnw9gerKiuwX+4W873OogFztyfbTj3e3lXL1mcVsVVP1N5RZIuU5S4nHwjAnkEEbuTKFBKdFCPUpOOHg/2TnaKd3uCMj6oxHNBARYAwhbVGz5XJlEkmiyu5BCYc4l/WLsQgZT7wajlt7B2u9LIMRmnsxO6WwPcELAuiSN14Wyd2lRQK+HauDNMvQHMftVK0IPJrmFYR1XXeR3rFsG+mwgRENaTPTekrEiPFBs+anu492lXqBrZhWTe6BxceCnDI+htvHLJEwjnG/rPehwIA3yQpfVCU8wv21PuYnm9PJZDr5Yzr5cjr5cTr5azr5czp5NZ18D9eyEpCWH+E0JbHn4zjuS7rWwApxnMvtNeNN89OQwQJ6A50b1IIpQ8oh7wCP61kArV4YF3nkzXPftizTPduYEwrXtl3HdszOTaHQTe2dCQUuBDuq1/jP1YKOIhwTP2ZFILGHCrWgagQ9VfcxTXvQxCEV41b5m6X6OmARIFFuakX1B0P1dRKTBDpcbZQDFRkcBaWgXw41pq5yC6ObgHqJ5giCMp0SoT4lkDYdkj08ZoWYKWPd/7ujs2qaiOdQs5xCb6kKhmbbhmlDvW/KgmmhBywLMJCwVN0q/94sDZ9QMjos27nShwelD5yEhFcJ3o+gBb8/tu4hCkvj/2dhoAGAnl5iu74dg0iyAa1BqbsucizT7ziahdtax7YC2w1DbOu4bSHHtfp6v420TsfQ2le+vm4akla36seMOoDDs3zp49A8p3TVMFRzGc7PbtB2GewX0nkh4ocgChnj4spXvoNdmWvvatrr2SzaOPCCQLtAacOQ+l7OCg5CUCP271e/XXz788XvX/zz1csZ55xg7kfegIwB3rI6Fz/9cv7yh/Ovfz2fvPbqoG++O389mQmaQf01ElxBOxIi655snmwCJv04k9CsaJx0Xc3WTjZbJ5tx4Q+2OR59REOxB32to70My8SVk81riF1Da8dLkDlrrbBZE7fZnBexXNQ7vK6u74OMLpfLpUJ4F4V6J2J5dpdT+9pzwOXxmOFTIjGv3Hh+MFEHoD/zrNG2QC1MzZWvIF407nMaeJHVJLBSpiq1igRDmtOGCoqhGWZbs9qGuaajrul0TVO1DEPOWXlfo3Bl7HM2yoE5MU5PC+gSDD6P2n560wPeRHkpgsrx0aO2e+VwNy2qfO8hRfcBHFQnpDGB6YXHUp8swJll2HM4s1wdUONYK5Stzr8P9vxrzKsD8MM9AC1zXph0G5TGMZFjr6RpJU23S9McmGehvERC3k66FijVSmjeH6GRH6EeU3GAi8EiqUHOnNSAypjys55xL6XpnH3+L4jsCGheHAAA是经过URL编码的,其中包含了%20这个字符,这个字符在URL编码中代表的是空格。
在对这个字符串进行解码时,如果没有正确处理URL编码,就会导致解码失败并抛出IllegalArgumentException异常。
要解决这个问题,可以先对URL编码进行解码,然后再进行Base64解码。可以使用java.net.URLDecoder类的decode()方法进行URL解码,例如:
```
String input = "H4sIAAAAAAAAAO1YS2/bRhD+Kwblo0XzsXxIN8F2GgN2asR2e6gLYkUuzY1ILrFcSlACA+qhaHtpDi0KFOm1l556aIuiyJ/RwS76LzrLhy3ZUmwjbZAY0kXk7Mzuzsz3fUvysxeKJzj2Bx4NlK6pIYR0yzA3FEETonR120WuYbqWriEDjOMMjEoZoGwoAc0FTX1RxioGwmZomMh3+m4Qaj444JSl44QV+VKPmPaV7gtlHf69hIiIST+fBQTG1stBpZcGnEF8ZfCGhOeUpTBgqYZqSTPOshkzUpHqNt4BEZjG5ZyJmpM0ZzwPsMAqTnE8FtTP4aqcX82Dgdrr5zI5cVh5boNn72C31Soz3hmSVOymgnCIbbUW+6rP8BC3WjqyLeVsQyEyBpZPMuFV1xtKxllGuKAkL1PPfU5I6kWEnkbg6uoa7J3ld848xbJTyv7BETqWtoAMqU+WVnw9gerKiuwX+4W873OogFztyfbTj3e3lXL1mcVsVVP1N5RZIuU5S4nHwjAnkEEbuTKFBKdFCPUpOOHg/2TnaKd3uCMj6oxHNBARYAwhbVGz5XJlEkmiyu5BCYc4l/WLsQgZT7wajlt7B2u9LIMRmnsxO6WwPcELAuiSN14Wyd2lRQK+HauDNMvQHMftVK0IPJrmFYR1XXeR3rFsG+mwgRENaTPTekrEiPFBs+anu492lXqBrZhWTe6BxceCnDI+htvHLJEwjnG/rPehwIA3yQpfVCU8wv21PuYnm9PJZDr5Yzr5cjr5cTr5azr5czp5NZ18D9eyEpCWH+E0JbHn4zjuS7rWwApxnMvtNeNN89OQwQJ6A50b1IIpQ8oh7wCP61kArV4YF3nkzXPftizTPduYEwrXtl3HdszOTaHQTe2dCQUuBDuq1/jP1YKOIhwTP2ZFILGHCrWgagQ9VfcxTXvQxCEV41b5m6X6OmARIFFuakX1B0P1dRKTBDpcbZQDFRkcBaWgXw41pq5yC6ObgHqJ5giCMp0SoT4lkDYdkj08ZoWYKWPd/7ujs2qaiOdQs5xCb6kKhmbbhmlDvW/KgmmhBywLMJCwVN0
已知文法G定义为G=({ S,W,X,Y,Z}, { x,y,z }, P, S) 其中,P为 S→WZ W→|Y X→x|xX Y→y|yY Z→z|zZ 与该文法描述相同语言的正规表达式有 ( )。 2分
首先,我们可以将文法转化为正则文法,然后再通过正则文法推导出正规表达式。
将文法转化为正则文法的步骤如下:
1. 消除S的出现:添加一个新的起始符号S',并添加规则S'→S。
2. 消除单一产生式:对于每个非终结符A,如果存在一个产生式A→B,其中B是非终结符,则将所有的A→B的产生式替换为A的所有产生式的副本。
3. 消除左递归:如果存在一个产生式A→Aα|β,其中α和β都不以A开头,则将该产生式替换为A→βA',A'→αA'|ε。
经过上述步骤,我们得到的正则文法为:
S'→WZ
W→Y|YX
X→x|xx
Y→y|yy
Z→z|zZ
接下来,我们可以使用正则文法推导出正规表达式。
首先,我们将每个非终结符用其对应的正规表达式替换,得到:
S'→(y|yy|x|xx)(z|z(z|z(z|z(z|z...)))
W→(y|yy)(z|z(z|z(z|z(z|z...)))|(y|yy)(x|xx)(z|z(z|z(z|z(z|z...)))
X→x|(x|xx)(x|xx)*
Y→y|(y|yy)(y|yy)*
Z→z|(z|z(z|z(z|z(z|z...)))
接着,我们可以消除每个产生式中的括号,得到:
S'→y|yy|x|xxz|zz|zzz|zzzz|...
W→y|yyz|zz|zzz|zzzz|...|yyxz|yyyxxz|yyyxxxxz|yyyyxxxzx|...
X→x|(xx)*
Y→y|(yy)*
Z→z|(zz)*
最后,我们将所有的产生式合并,并消除重复的部分,得到正规表达式:
(y|yy|x|xx)((z|zz)*)|(y|yy)((z|zz)*)x((x|xx)*)|(y|yy)((z|zz)*)y((y|yy)*)|(z|zz)((z|zz)*x((x|xx)*)|(z|zz)*y((y|yy)*))|(x|(xx)*)
因此,该文法描述相同语言的正规表达式为:
(y|yy|x|xx)((z|zz)*)|(y|yy)((z|zz)*)x((x|xx)*)|(y|yy)((z|zz)*)y((y|yy)*)|(z|zz)((z|zz)*x((x|xx)*)|(z|zz)*y((y|yy)*))|(x|(xx)*)
阅读全文