Другие языки программирования и технологии

из заданной последовательности слов, удалить слова, содержащие числа

#include <string>
#include <stdio.h>

bool word_contains_num(const std::string& word);

int _tmain(int argc, _TCHAR* argv[])
{
std::stringsource = "some string with3 a1 few wor4ds cont8aini4ng numbe224rs ";
std::string result = "";

std::stringword;
std::string::size_type src_len = source.length();
std::string::size_type cur_pos = 0;
std::string::size_type space_pos;

while (cur_pos <= src_len)
{
space_pos = source.find(' ', cur_pos);
if (-1 == space_pos)
space_pos = src_len + 1;

word = source.substr(cur_pos, space_pos - cur_pos);
if (!word_contains_num(word))
result += word + " ";

cur_pos = space_pos + 1;
}

// отрезаем последний пробел в строке. о там обязательно будет,
//если строка не пустая
if (!result.empty())
result = result.substr(0, result.length() - 2);

printf("Source string: %s\nResult string: %s\n", source.c_str(), result.c_str());

return 0;
}

bool word_contains_num(const std::string& word)
{
for (int i = 0 ; i < word.length() ; i++)
{
if ( isdigit(word) )
return true;
}

return false;
Александр Луканин
Александр Луканин
885
Лучший ответ
Решение это самостоятельно. Вот подсказка.

Выделение слов из предлжжения.

S := S + ' '; {чтобы не потерять последнее слово}
while Pos(' ', S) > 0 do begin
S1 := Copy(S, 1, Pos(' ', S)-1);
{в S1 очередное слово}

Delete(S, 1, Pos(' ', S));
end;

Проверка слова на наличие цифр

HasNum := False; {предположим, цифр нет}
for i:=1 to Length(S1) do if (S1[ i ] < '0') or (S1[ i ] > '9') then begin HasNum := True; Break; end;

Формирование последовательности слов без цифр

if not HasNum then Sout := Sout + S1 + ' ';
Михаил Михаил
Михаил Михаил
59 613
Передай своему преподу, что он дебил и извращенец, раз заставляет работать со строками на сволочном язычке Паскале. На любом языке с поддержкой регэкспов это делается с полпинка. Например на Perl так:

$str = "text text tex3t";
@eax = $str =~ m/\b[A-Za-z]+\b/gi;
print join(" :: ", @eax);
Парвиз Бобоев
Парвиз Бобоев
1 818

Похожие вопросы