PTA |1009 说反话 字符串反转 输入输出

137 阅读1分钟

PTA |1009 说反话

一.读取完倒着打印就行了:

#include <stdio.h>
#include <string.h>
#include<iostream>
using namespace std;
int main() {
    char str[81];
    cin.getline(str,81);
    for (int i = strlen(str); i > 0; i--) {
        if (str[i] == ' ') {
            printf("%s ", &str[i + 1]);
            str[i] = '\0'; //\0表示结束符,后续字符串将在次中断
        }
    }
    printf("%s", &str[0]);
    return 0;
}

二.用辅助间存储 利用栈后进先出的特性倒着输出

#include<bits/stdc++.h> 
using namespace std;
int main()
{
    stack<string> a;// 定义一个栈 存字符串 
    string temp;
    while(cin>>temp)//  将输入的字符串一字符串的形式存到栈中 
        a.push(temp);//  压栈 
    bool flog = false;
    while(!a.empty())
    {
        if(flog)
            cout<<" ";
        cout<<a.top();
        a.pop();
        flog = true;
    }
    return 0;
}

三.翻转 先局部再整体 先整体再局部都可以

image.png


#include <iostream>
#include<cstring>
using namespace std;

void reverse(char str[], int start, int end) {
    while (start < end) {
        char temp = str[start];
        str[start] = str[end];
        str[end] = temp;
        start++;
        end--;
    }
}

int main() {
    char str[81];
     cin.getline(str,81 );
    int len = strlen(str) - 1; // 计算字符串长度,不包括最后的换行符
    reverse(str, 0, len - 1); // 翻转整个字符串
    int start = 0;
    for (int end = 0; end < len; end++) {
        if (str[end] == ' ') {
            reverse(str, start, end - 1);
            start = end + 1;
        }
    }
    reverse(str, start, len - 1);
    while (len > 0 && (str[len-1] == ' ' || str[len-1] == '\n')) {  
        len--;  
    }
    // 输出结果  
    cout << str << endl;  
    return 0;  
}

四.利用迭代器从后往前输出

用strinfstream配合getline()可以忽略空格,只读取每个单词:

image.png

#include<bits/stdc++.h>
using namespace std;
int  main()
{
    string s;getline(cin,s);

    stringstream ss(s);
    vector<string>v;
    string words;

    while(ss>>words)
    {
        v.push_back(words);
    }

      for (int i = v.size() - 1; i >= 0; i--) {
        if (i != v.size() - 1) cout << " ";
        cout << v[i];
    }


    //     vector<string>::reverse_iterator it = v.rbegin();

    // for (; it != v.rend(); it++)
    // {
    //     cout << *it;
    //     if (it != v.rend() - 1)cout << " ";
    // }

    return 0;
}