任务是读取字符串并将第一个字符与最后一个字符交换。这是我的代码:我不明白为什么输出与输出相同。非常感谢你的帮助。
#include <iostream>
#include <string>
using namespace std;
int main()
{
cout << "Enter string: " << endl;
string str;
cin >> str;
char first = str[0];
int lastChar = str.length() -1;
char last = str[lastChar];
char temp;
temp = first;
first = last;
last = temp;
cout << last << endl;
return 0;
}
答案 0 :(得分:1)
您正在将字符复制到第一个和最后一个变量中,然后交换它们而不是交换字符串的元素。
temp = str[0];
str[0] = str[lastChar];
str[lastChar] = temp;
答案 1 :(得分:1)
首先,你唯一输出1个角色的Neil Kirk说。你怎么期望得到整个字符串呢?
此外first
包含字符串的最后一个值,last
包含字符串的第一个值,因此请尝试将这些值与问题合并,然后您就会得到答案。
答案 2 :(得分:1)
您可以这样做: -
string str; //string on which replacement would take place.
char temp;
int lastIndex = str.length() - 1;
temp = str[0];
str[0] = str[lastIndex];
str[lastIndex] = temp;
答案 3 :(得分:0)
问题是您没有交换字符串中的字符,而只是交换first
和last
的内容。然后,您只输出last
的内容,这是一个单个字符。有几种方法可以解决这个问题。一种方法是直接交换字符串中的字符。
char temp = str[0];
str[0] = str[lastChar];
str[lastChar] = temp;
或者,如果您使用的是C ++ 11,也可以使用std::string::front()
和std::string::back()
完成此操作。
char temp = str.front();
str.front() = str.back();
str.back() = temp;
另一种更惯用且更首选的方法是使用std::swap
。
std::swap(str[0], str[str.size() - 1])
完成交换后,您可以使用
输出整个字符串cout << str << endl;
作为旁注,我建议您不要使用using namespace std;
,因为它会将std
的全部内容提取到using
语句的范围内。这可能导致名称冲突和其他令人讨厌的副作用,可能会毁了你的一天。