你能告诉我为什么我的程序无效吗?

时间:2014-10-29 14:33:11

标签: c++

任务是读取字符串并将第一个字符与最后一个字符交换。这是我的代码:我不明白为什么输出与输出相同。非常感谢你的帮助。

#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;
}

4 个答案:

答案 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)

问题是您没有交换字符串中的字符,而只是交换firstlast的内容。然后,您只输出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语句的范围内。这可能导致名称冲突和其他令人讨厌的副作用,可能会毁了你的一天。