1144:单词翻转
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 32682 通过数: 14793
【题目描述】
输入一个句子(一行),将句子中的每一个单词翻转后输出。
【输入】
只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。
【输出】
翻转每一个单词后的字符串,单词之间的空格需与原文一致。
【输入样例】
hello world
【输出样例】
olleh dlrow
#include<iostream>
#include<cstring>
using namespace std;
int main() {
char sent[501], a;
//t为计数器,后面会使用;index为单词起始位置,方便提取单词
int t = 0, index = 0;
cin.getline(sent, 501);
size_t l = strlen(sent);
//开始翻转
for (int i = 0; i < l; i++) {
//如果单词并没有结束,则计数器t+1
if (sent[i] != ' ') t++;
//如果单词结束,开始翻转工程
else {
//翻转
for (int j = index; j <= index + t; j++) {
//交换,空瓶子法
a = sent[(index + t) - j - 1];//写入溢出位置
sent[(index + t) - j - 1] = sent[j];//读取无效数据
sent[j] = a;
}
//下一个单词的起始位置设在空格后一位
index = index + t + 1;
//计数器归零,为下一次做准备
t = 0;
}
}
//输出转换后的句子
for (int i = 0; i < l; i++) {
cout << sent[i];
}
return 0;
}
写入sent时缓冲区溢出
警告 C6386 写入 "sent" 时缓冲区溢出。
我看完循环以后,发现索引并没有超出到。求修改并且指出问题,谢谢。