首页 > 解决方案 > 在反转字符串“my.name.is”时,我得到的输出为“is@.name.my”。我不明白“@”是从哪里来的

问题描述

给定一个长度为 S 的字符串,反转整个字符串而不反转其中的单个单词。单词用点分隔。

输入:第一行包含 T 表示测试用例的数量。T 测试用例如下。每个 case 都包含一个包含字符的字符串 S。

输出:对于每个测试用例,在新行中,输出包含反转字符串的单行。

约束:1 <= T <= 100 1 <= |S| <= 2000

示例:输入:

i.like.this.program.very.much

输出:much.very.program.this.like.i

#include <bits/stdc++.h>
using namespace std;


int main() {
    //code
    int t;cin>>t;
    while(t--) {
        string s;
        cin>>s;
        stack<string> st;
        int siz = s.size();
        char c[siz];
        for(int i =0;i<siz;i++) {
            c[i] = s[i];
        }
        char *token = strtok(c,".");
        while (token != NULL) 
        { 
            st.push(token);
            st.push("."); 
            token = strtok(NULL, "."); 
        }
        st.pop();
        while(!st.empty()) {
            cout<<st.top();
            st.pop();
        }
        cout<<"\n"; 

    }
    return 0;
}

标签: c++stringgccstackstrtok

解决方案


当你这样做

    char c[siz];
    for(int i =0;i<siz;i++) {
        c[i] = s[i];
    }

您不附加0toc[]来标记字符串的结尾。

如果您用作siz + 1数组大小,并在末尾放置一个零(空字符),它将起作用。

但是,您仍然不应该使用 VLA。


推荐阅读