|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
28.11.2016, 09:38 | #1 (permalink) |
Новичок
Регистрация: 28.11.2016
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Вывод слов,которые заканчиваются на "С" - C++
У меня пока получилось только сделать так,чтобы он выводил количество таких слов,а вот сами слова не могу,помогите. Код:
#include "stdafx.h" #include "iostream" #include "math.h" #include "string" #include "windows.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) {SetConsoleCP(1251); SetConsoleOutputCP(1251); string s; int n=0; int a; cout <<"Введите слова через запятую:" << endl; cin>> s; a=s.length(); for (int i=0; i<a; i++){ if ((s[i]=='с')&&(s[i+1]==',')) {n++;}; ; } cout << n << endl; cout << s; system ("pause"); return 0; } |
28.11.2016, 09:38 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Подобные темы уже не раз создавались, вот они Как активировать галочку "скрыть режимы, которые монитор не может использовать"? Вражеский водолаз "Роял Нейви" и 7 его друзей. Проект"Русский стимпанк". Серия"Враги" Samsung RV520: не идет далее слов "Загрузка Windows" Samsung RV520: не идет далее слов "Загрузка Windows" Вместо слов "????????" |
28.11.2016, 10:38 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Попытаюсь помочь, хотя в С - ни бельмеса. Тем более, в С++.
Но так, несколько соображений. 1. У Вас даже подсчет количества слов не совсем корректен: практически исключено из обработки последнее слово. А ведь оно тоже может заканчиваться на "с", и после него нет запятой! Поэтому цикл следует поправить как-то так: for (int i=0; i<a; i++){ if (((s[i]=='с')&&(s[i+1]==','))||((s[i]=='с')&&(i==a-1))) 2. Чтобы выводить нужные слова, проще всего создать вспомогательную строковую переменную, например string Q; И дальше как-то так: Q=''; for (int i=0; i<a; i++){ while ((!s[i]==' ')&&(!s[i]==',')) {Q=Q+s[i]} if (((s[i]=='с')&&(s[i+1]==','))||((s[i]=='с')&&(i==a-1))) { {n++; cout << Q; Q=''}; ; } Извините за возможные ошибки, языка не знаю, просто на уровне идей. |
28.11.2016, 10:50 | #3 (permalink) | |
Новичок
Регистрация: 28.11.2016
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Цитата:
|
|
28.11.2016, 11:50 | #4 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Ага, понял, в чем ошибка - надо оператор While заменить на If. На Паскале - так (отлажено; учтите, что, в отличие от С, счет в цикле идет с 1, а не с 0): Код:
Var S,Q:String; i,a,n:Byte; Begin Writeln('Enter the string with coma separator:'); Readln(S); a:=Length(S); n:=0; Q:=''; for i:=1 to a do begin if (S[i]<>',') and (S[i]<>' ') then Q:=Q+S[i]; if ((S[i]='s') and (S[i+1]=',')) or ((S[i]='s') and (i=a)) then begin n:=n+1; writeln(Q); Q:=''; end; end; Writeln('n = ',n); Readln End. |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|