用动态数组实现一下,刚好熟悉一下vector用法
第一次写完长这样:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
struct Word
{
int num;
char f_c;
char l_c;
};
void WordTrans(const int &i,Word& WT)
{
string word;
cin >> word;
WT.num = word.size() - 2;
WT.f_c = word[0];
WT.l_c = word[word.size() - 1];
}
int main()
{
int N;
cin >> N;
vector<Word> WT;
WT.reserve(N);
for (int i = 0; i < N; i++)
{
WordTrans(i,WT[i]);
}
for (int i = 0; i < N; i++)
{
if ((WT[i].word).size() > 10)
cout << WT[i].f_c << WT[i].num << WT[i].l_c << endl;
else
cout << WT[i].word << endl;
}
return 0;
}
这段它编译没问题但是运行之后会报错,问题出在这几行:
vector<Word> WT;
WT.reserve(N);
只是声明了一个vector,给它留了N大小的空间但是没有创建实际的对象。
改正之后:
#include<iostream>
#include<string>
#include<vector>
using namespace std;
struct Word
{
string word;
int num;
char f_c;
char l_c;
};
void WordTrans(const int& i, vector<Word>& WT)
{
cin >> WT[i].word;
WT[i].num = (WT[i].word).size() - 2;
WT[i].f_c = (WT[i].word)[0];
WT[i].l_c = (WT[i].word)[(WT[i].word).size() - 1];
}
int main()
{
int N;
cin >> N;
vector<Word> WT(N); // 初始化vector以存储N个Word对象
for (int i = 0; i < N; i++)
{
WordTrans(i, WT);
}
for (int i = 0; i < N; i++)
{
if ((WT[i].word).size() > 10)
cout << WT[i].f_c << WT[i].num << WT[i].l_c << endl;
else
cout << WT[i].word << endl;
}
return 0;
}