Дана строка, состоящая из слов разделенных пробелами. Вывести на экран порядковый номер слова максмимальной длины и номер позиции строки, с которой оно начинается.
Дана строка, состоящая из слов разделенных пробелами. Вывести на экран порядковый номер слова максмимальной длины и номер позиции строки, с которой оно начинается.
Код:
#include <iostream>
#include <cctype>
using namespace std;
unsigned indexOf(const char* s, unsigned& n, unsigned& l){
unsigned k, a, b = 0, i = (unsigned)-1;
const char* p, *t = s;
n = k = 0;
do {
while(*s && ! isalpha(*s))
++s;
p = s + 1;
while(isalpha(*p))
++p;
a = (unsigned)(p - s);
if(a > b){
b = a;
i = (unsigned)(s - t);
l = i + a;
n = k;
}
s = p;
++k;
} while(*s != '');
return i;
}
int main(void){
char s[] = "Venus, Earth, Mercury, Mars";
unsigned n, e;
unsigned p = indexOf(s, n, e);
if(p != (unsigned)-1){
cout << "word at: " << n << endl;
cout << "index: " << p << endl;
cout << "word: ";
cout.write(s + p, (int)(e - p));
}
return 0;
}
#include <cctype>
using namespace std;
unsigned indexOf(const char* s, unsigned& n, unsigned& l){
unsigned k, a, b = 0, i = (unsigned)-1;
const char* p, *t = s;
n = k = 0;
do {
while(*s && ! isalpha(*s))
++s;
p = s + 1;
while(isalpha(*p))
++p;
a = (unsigned)(p - s);
if(a > b){
b = a;
i = (unsigned)(s - t);
l = i + a;
n = k;
}
s = p;
++k;
} while(*s != '');
return i;
}
int main(void){
char s[] = "Venus, Earth, Mercury, Mars";
unsigned n, e;
unsigned p = indexOf(s, n, e);
if(p != (unsigned)-1){
cout << "word at: " << n << endl;
cout << "index: " << p << endl;
cout << "word: ";
cout.write(s + p, (int)(e - p));
}
return 0;
}