Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > C/C++/С#


Ответ
 
Опции темы Опции просмотра
Старый 28.11.2016, 09:38   #1 (permalink)
Tikusjomo
Новичок
 
Регистрация: 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;
}
Tikusjomo вне форума   Ответить с цитированием

Старый 28.11.2016, 09:38
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Подобные темы уже не раз создавались, вот они

Как активировать галочку "скрыть режимы, которые монитор не может использовать"?
Вражеский водолаз "Роял Нейви" и 7 его друзей. Проект"Русский стимпанк". Серия"Враги"
Samsung RV520: не идет далее слов "Загрузка Windows"
Samsung RV520: не идет далее слов "Загрузка Windows"
Вместо слов "????????"

Старый 28.11.2016, 10:38   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 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=''};
;
}

Извините за возможные ошибки, языка не знаю, просто на уровне идей.
Vladimir_S вне форума   Ответить с цитированием
Старый 28.11.2016, 10:50   #3 (permalink)
Tikusjomo
Новичок
 
Регистрация: 28.11.2016
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Попытаюсь помочь, хотя в С - ни бельмеса. Тем более, в С++.
Но так, несколько соображений.

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=''};
;
}

Извините за возможные ошибки, языка не знаю, просто на уровне идей.
Ошибок немного,быстро исправил,только вот программа ничего не делает после ввода слов
Tikusjomo вне форума   Ответить с цитированием
Старый 28.11.2016, 11:50   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Tikusjomo Посмотреть сообщение
Ошибок немного,быстро исправил,только вот программа ничего не делает после ввода слов
Всё, чем могу помочь - нарисовать на Паскале и протестировать. А дальше уж Вы сами.
Ага, понял, в чем ошибка - надо оператор 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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 02:46.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.