Исходная строка содержит сведения о человеке: фамилию, инициалы, год рождения, рост в см. Эти сведения отделены друг от друга пробелами. Например:
Иванов И.И. 1976 187
И.И. Иванов 187 1976
187 И.И. 1976 Иванов и т. п.
Нужно вывести эти сведения на экран в следующем виде:
Иванов И.И. 1976 года рождения имеет рост 187 см.
Начал решать самым дубовым способом, вот что получилось:
#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
main ()
{
unsigned char s[80], f[30], in[4], year[4], r[3];
int k=0, a=0, b=0, c=0, q=0;
//заставка
printf("\n\nАвтор: \nВиталий\nCтудент группы Р-16062 \nЕкатеринбург 2007\n\n");
printf("\nИсходная строка содержит сведения о человеке: фамилию,\nинициалы, год рождения, рост в сантиметрах.");
printf("\nЭти сведения расположены в произвольном порядке,\nотделены друг от друга пробелами.\n\nНапример:");
printf("\nИванов И.И. 1976 187\nИ.И. Иванов 187 1976\n187 И.И. 1976 Иванов и т.п.\n\nВывести эти сведения на экран в следующем виде:\n");
printf("Иванов И.И. 1976 года рождения имеет рост 187 см.");
printf("\n\nВведите исходную строку....\n");
//ввод исходных данных
gets(s);
//Ищем кол-во символов в фамилии...
for (int l=0; l<80; l++) if ((s[l]>=160 && s[l]<=175) || (s[l]>=224 && s[l]<=239)) q=q+1;
cout<<q;
//Находим фамилию, инициалы, год рождения и рост и копируем их во вспомогательные массивы
for (int i=0; i<80; i++)
if ((s[i]>=128 && s[i]<=159) && ((s[i+1]>=160 && s[i+1]<=175) || (s[i+1]>=224 && s[i+1]<=239)))
{ for (int j=i; j<i+q; j++)
{
f[k]=s[j];
k++;
}
f[k]=0;
break;
}
/* for (i=0; i<80; i++)
if (s[i]>=128 && s[i]<=159 && s[i+1]==46)
{ for (int j=i; s[j]!=' '; j++)
{
in[a]=s[j];
a++;
}
in[a]=0;
break;
}
*/
for (i=0; i<80; i++)
if (s[i]==49 && (s[i+3]>=48 && s[i+3]<=57))
{ for (int j=i; s[j]!=' '; j++)
{
year[b]=s[j];
b++;
}
year[b]=0;
break;
}
/* for (i=0; i<80; i++)
if (s[i]>=49 && (s[i+2]>=48 && s[i+2]<=57))
{ for (int j=i; s[j]!=' '; j++)
{
r[c]=s[j];
c++;
}
break;
}
*/
//вывод данных
puts(f);
// cout<<" ";
// puts(in);
// cout<<" ";
// puts(year);
// cout<<" года рождения имеет рост ";
// puts®;
// cout<<" см.";
getche();
return 0;
}
это работает с ощибками: Вместе с фамилией выдается еще несколько ненужных символов, иногда программа зависает, не правильно определяются Дата рождения и Рост.
Помоготи пожалуйста!
Заранее благодарен
Vitaliy