Jeżeli T jest stałą to wystarczy taka deklaracja :
string tab[T];
Jeżeli T jest zmienną, która będzie znana dopiero w momencie np. gdy użytkownik ją poda to powinieneś zrobić tablice dynamiczną a najłatwiej i najbezpieczniej będzie użyć np. vectora :
vector<string> tab;
tab.resize(T); // zmiana rozmiaru tablicy
tab.push_back(string) // dodanie do tablicy nowego stringa
Jeżeli chodzi o to ile string może mieć znaków, nie musisz się tym martwić. Klasa string jest kontenerem i sama sobie alokuje potrzebną pamięć. (działa podobnie do np. klasy vector).
Wczytywanie stringa w pętli można zrobić np. tak :
for(int i = 0; i < T; ++i)
{
string tmp;
getline(cin, tmp);
tab.push_back(tmp);
}
Należy użyć getline, ponieważ cin, wczytuje tylko ciąg znaków do momentu napotkania znaku białego (czyt. spacji).