杭电ACM 1062: Text Reverse

494次阅读
一条评论

刚刚ac了一个输入字符串的杭电题,发现坑好多呀,

杭电ACM 1062: Text Reverse

原题如下:

杭电ACM

/>

解决问题:

这道翻转字符串题的难点就在于,如何输入一个带有空格的字符串,具体的函数讲解,请看我的上一篇文章:c++输入带空格字符串

这里补充一点,gets()函数,也是整行读取字符串,遇到换行符就结束读取,并把换行符当成 \0 写入到末尾。

代码展示:

#include<iostream>
using namespace std;

int main(){
    int n, x, y;    // x记录上一次翻转字符的最高位的索引号
    string st;
    cin>>n;
    getchar();
    while(n--){
        x=0;
        getline(cin, st);
        for(int i=0;i<st.length(); i++){
            if (isspace(st[i])){    // isspace()判断是否是空格,然后翻转前面的字符
                y = i;
                reverse(st.begin()+x, st.begin() + y);     // reverse 交换数据
                x = y+1;
            }
            else if (i == (st.length()-1)){      // 字符串的最后一位,前面的也要翻转
                y = i+1;
                reverse(st.begin() + x, st.begin() + y);
            }
        }
        cout<<st<<endl;
    }
    return 1;
}

解释一下代码,按照题意,有两种情况是需要反转的。一种是遇到空格的时候,翻转前面的字符串,第二种是到最后一位时,也是需要翻转其前面的字符串。

另外需要注意,reverse 这个翻转函数的坑,用于反转在[first,last)范围内的顺序(包括first指向的元素,不包括last指向的元素),reverse 函数没有返回值,他如同 Python 列表区间一样,包前不包后。

所以上面的 y 都会加1,不要觉得有问题。

总结:

遇到了读取带空格字符串的问题,现在也是解决了。

5
西园公子
版权声明:本站原创文章,由西园公子2021-01-27发表,共计778字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(一条评论)
载入中...
西园公子 博主
2021-01-28 10:56:58 回复

冲冲冲