Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
EGKR
3 / 3 / 2
Регистрация: 10.11.2014
Сообщений: 94
#1

Работа со строками. Заменить каждую первую букву в словах, начинающихся с гласной буквы на прописную

17.10.2015, 14:43. Просмотров 657. Ответов 13
Метки нет (Все метки)

Заменить каждую первую букву в словах, начинающихся с гласной буквы на прописную.
Что только не делал, но так и не получилось. Заменяет только в первом слове, а дальше выводит без замены...
Помогите пожалуйста составить программу, желательно не замудренную.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <string.h>
using namespace std;
 
int main ()
{
char str[14];
int i,n,ns=0,ks,j;
cout << "vvedite " << endl;
gets(str);
n=strlen(str);
for (i=0;i<n;i++)
if (str[i]==' '){
ks=i;}
else
        if (str[ks-1]=='a'){
            for(j=ns;j<ks;ks++){
        cout << str[j];
                    ns=ks+1;}
        }
    return 0;}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2015, 14:43
Ответы с готовыми решениями:

Заменить каждую первую букву слов, начинающихся с гласной буквы, на прописную
Написать программу, которая считывает английский текст из файла и выводит его...

Заменить каждую первую букву слов, начинающихся с гласной буквы, на прописную
В произвольно взятом предложении (английский шрифт) заменить каждую первую...

Заменить в файле каждую первую букву слова на прописную
Написать программу, которая считывает текст из файла и выводит его на экран,...

Программа которая заменяет первую букву слова с гласной на прописную
Написать программу, которая считывает английский текст из текстового файла и...

В каждом слове заменить первую букву на прописную
Дана строка символов, состоящая из произвольного текста, слова разделены...

13
Barrent
246 / 122 / 54
Регистрация: 04.05.2013
Сообщений: 346
Завершенные тесты: 2
17.10.2015, 14:56 #2
Лучший ответ Сообщение было отмечено EGKR как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stdafx.h"
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    string str;
    string vowels = "aeiou";
    cout << "String:  ";
    getline(cin, str);
    for (int i = 0; i < str.size(); i++)
        if((i == 0 || str[i - 1] == ' ') && vowels.find(str[i]) != string::npos)
            str[i] -= 32;
    cout << "Replaced: " << str << endl;
    system("pause");
    return 0;
}
0
nmcf
6271 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
17.10.2015, 15:00 #3
C++
1
2
3
4
5
char v[] = "aeiou";
 
for (i = 0; i < n - 1; ++i)
  if (str[i] == ' ' && strchr(v, str[i + 1]) != NULL)
    str[i] = toupper(str[i]);
0
EGKR
3 / 3 / 2
Регистрация: 10.11.2014
Сообщений: 94
17.10.2015, 15:25  [ТС] #4
Можете объяснить это условие?
C++
1
        if((i == 0 || str[i - 1] == ' ') && vowels.find(str[i]) != string::npos)
0
Barrent
246 / 122 / 54
Регистрация: 04.05.2013
Сообщений: 346
Завершенные тесты: 2
17.10.2015, 15:28 #5
i - позиция текущего символа в строке
i == 0 - если первое слово в предложении
|| - логическое ИЛИ
str[i - 1] == ' ' - если не первое слово в предложении
&& - логическое И
!= - не равно
vowels.find(str[i]) - ищет в строке vowels символ str[i]. Если символ отсутствует, то возвращает string::npos
1
EGKR
3 / 3 / 2
Регистрация: 10.11.2014
Сообщений: 94
17.10.2015, 17:03  [ТС] #6
Не могли бы вы написать код, но только без использования этих функций (getline, find).
Как если бы я создал массив для строки?
0
nmcf
6271 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
17.10.2015, 17:04 #7
EGKR, мой вариант "без функций".
0
EGKR
3 / 3 / 2
Регистрация: 10.11.2014
Сообщений: 94
17.10.2015, 17:07  [ТС] #8
а можно весь код?
0
nmcf
6271 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
17.10.2015, 17:13 #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <string.h>
using namespace std;
 
int main ()
{
char v[] = "aeiou";
char str[14];
int i,n,ns=0,ks,j;
 
cout << "vvedite " << endl;
 
cin.getline(str, 14);
 
n=strlen(str);
for (i = 0; i < n - 1; ++i)
  if (str[i] == ' ' && strchr(v, str[i + 1]) != NULL)
    str[i] = toupper(str[i]);
 
cout << str << endl;
 
    return 0;
}
0
Barrent
246 / 122 / 54
Регистрация: 04.05.2013
Сообщений: 346
Завершенные тесты: 2
17.10.2015, 17:16 #10
Без функций так без функций, проще уже некуда
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
int main()
{
    char str[14];
    cout << "vvedite " << endl;
    gets_s(str);
    int n = strlen(str);
    for (int i = 0; i < n; i++) {
        if (i == 0 || str[i - 1] == ' ') {
            if (str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' || str[i] == 'u')
                str[i] = str[i] - 32;
        }
    }
    cout << str << endl;    
    system("pause");
    return 0;
}
Добавлено через 54 секунды
nmcf,
не учитываешь первое слово
0
EGKR
3 / 3 / 2
Регистрация: 10.11.2014
Сообщений: 94
17.10.2015, 17:19  [ТС] #11
Ввожу несколько слов в пределах 12 символов, но выдает ту же строку и без изменения регистра первой буквы Вы уверены, что она работает?

Добавлено через 1 минуту
а можно ли сделать не
C++
1
str[i] = str[i] - 32;
а через strupr?
0
Barrent
246 / 122 / 54
Регистрация: 04.05.2013
Сообщений: 346
Завершенные тесты: 2
17.10.2015, 17:28 #12
Цитата Сообщение от EGKR Посмотреть сообщение
а через strupr?
1) не стандарт
2) преобразовывает всю строку
Если охота через функцию, то
C++
1
str[i] = toupper(str[i]);
1
EGKR
3 / 3 / 2
Регистрация: 10.11.2014
Сообщений: 94
17.10.2015, 17:38  [ТС] #13
Спасибо, добрый человек!
0
nmcf
6271 / 5577 / 2537
Регистрация: 14.04.2014
Сообщений: 23,468
17.10.2015, 20:02 #14
Цитата Сообщение от Barrent Посмотреть сообщение
не учитываешь первое слово
Ну EGKR мог бы и сам допилить первое слово.
0
17.10.2015, 20:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2015, 20:02

В следующем слове после точки, первую строчную букву заменить на прописную
В строке, содержащей последовательность слов, найти конец предложения,...

Работа со строками: каждую букву введенного слова записать в массив
Задача состоит в том,что мне требуется ввести слово.Затем каждую его букву...

Отредактировать текст заменив каждую 5 букву со строчной на прописную и наоборот
помогите с написанием программы в С++ . срочно нужно очень, сам дуб дубом. в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru