Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
#1

Работа со строками (сделать 1-ю букву каждого предложения заглавной) - C++

11.08.2013, 16:40. Просмотров 848. Ответов 7
Метки нет (Все метки)

Привет всем, проблема в следующем- как сделать 1-ю букву каждого предложения заглавной. Я понимаю что можно ориентироваться на точку или терминальный ноль, но как мне получить 1-ю букву не пойму.
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include "iostream"
#include <string.h>
#include <time.h>
 
int main()
 
{
    srand(time(NULL));
    setlocale(LC_ALL,"Russian");
    const int a=5;
    const int b=100;
    int y=0;
    int c=0;
    
    char *article[a]={"the","a","one","sone","any"};
    char *noun[a]={"boy","girl","dog","town","car"};
    char *verb[a]={"drove","jumped","ran","walked","skipped"};
    char* preposition[a]={"to","from","over","under","on"};
    char*all[b]={0};
while(y!=100)
{
c=rand()%4;
all[y]=article[c];
y++;
int c=rand()%4;
all[y]=noun[c];
y++;    
c=rand()%4;
all[y]=verb[c];
y++;
c=rand()%4;
all[y]=preposition[c];
y++;
all[y]=".";
y++;
}
for(int x=0;x<b;++x)
{
    if(x%5==0)
std::cout<<"\n";
    std::cout<<all[x]<<" ";
}
system("pause");
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2013, 16:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа со строками (сделать 1-ю букву каждого предложения заглавной) (C++):

Сделать заглавной первую букву первого слова, во втором сделать заглавной вторую - C++
Помогите с программой на СИ++ Дан текст, состоящий не менее чем из пяти слов. Написать программу, которая выполняет следующие...

Работа со строками (Создать текстовый файл, вывести содержимое на экран, определить длину каждого предложения) - C++
Создать текстовый файл . в который вписать 3 предложения . Прочитать этот файл , вывести его содержимое на экран . Определить длину...

В заданной последовательности слов заменить первую букву каждого слова заглавной - C++
1. Дана последовательность слов. Напечатать все слова, предварительно вы*полнив преобразования их по правилу: заменить во всех словах...

Дано два предложения (Распечатать слова из первого предложения, который начинаются на первую букву последнего слова второго предложения) - C++
Дано два предложения. Распечатать: - слова из первого предложения, который начинаются на первую букву последнего слова второго...

Работа со строками. Определить, содержит ли заданное слово букву «д» - C++
Определить, содержит ли заданное слово букву «д». Если можно, то код как можно проще, типа cout &lt;&lt; &quot;Введите слово&quot;; cin&gt;&gt;s; ...

Работа со строками: каждую букву введенного слова записать в массив - C++
Задача состоит в том,что мне требуется ввести слово.Затем каждую его букву записать в массив. Подскажите пожалуйста. На форуме нашел те...

7
zss
Модератор
Эксперт С++
6537 / 6099 / 2009
Регистрация: 18.12.2011
Сообщений: 15,866
Завершенные тесты: 1
11.08.2013, 17:04 #2
Очень странное использование переменных:
C++
1
char*all[b]={0};
выделяется массив указателей длинной b слов.
далее операции типа
C++
1
all[y]=article[c];
присваивают значения этим указателям значения адресов некоторых слов.
Причем повторные присваивания далее стирают эти значения
C++
1
2
all[y]=noun[c];
 all[y]=verb[c];
и т.д.
Если нужно составить предложение, то под него надо предварительно выделить память.
Можно было бы например так
C++
1
char all[1000][b]={0};
1000 - максимальная длина предложения.
и копировать начальные слова надо так
C++
1
strcpy(all[y],article[c]);
а добавлять так
C++
1
strcat(all[y],noun[c]);
0
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
11.08.2013, 17:11  [ТС] #3
Цитата Сообщение от zss Посмотреть сообщение
Очень странное использование переменных:
char*all[b]={0};
выделяется массив указателей длинной b слов.
далее операции типа
all[y]=article[c];
присваивают значения этим указателям значения адресов некоторых слов.
Причем повторные присваивания далее стирают эти значения
all[y]=noun[c];
all[y]=verb[c];
и т.д.
Если нужно составить предложение, то под него надо предварительно выделить память.
Можно было бы например так
char all[1000][b]={0};
1000 - максимальная длина предложения.
и копировать начальные слова надо так
strcpy(all[y],article[c]);
а добавлять так
strcat(all[y],noun[c]);
Я согласен с Вами, я уже прочитал про функции работы строк, но все равно не нашел ответ на свой вопрос )))
п.с. этот код у меня тоже работал))
0
Миниатюры
Работа со строками (сделать 1-ю букву каждого предложения заглавной)  
zss
Модератор
Эксперт С++
6537 / 6099 / 2009
Регистрация: 18.12.2011
Сообщений: 15,866
Завершенные тесты: 1
11.08.2013, 17:28 #4
Констатные массивы действительно можно так использовать.
Но если формируете строку, то под нее обязательно выделяйте память.
В строке ищете очередную точку с помощью функции strchr:
C++
1
2
char* pos =all[0][b];
pos=strchr(pos,'.');
соответственно pos+1 - адрес первой буквы следующего предложения
(или терминального нуля).
1
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
11.08.2013, 18:24  [ТС] #5
Цитата Сообщение от zss Посмотреть сообщение
Констатные массивы действительно можно так использовать.
Но если формируете строку, то под нее обязательно выделяйте память.
В строке ищете очередную точку с помощью функции strchr:
char* pos =all[0][b];
pos=strchr(pos,'.');
соответственно pos+1 - адрес первой буквы следующего предложения
(или терминального нуля).
получается что бы мне вывести предложение мне надо делать так :
(предложение из 5 слов)
C++
1
2
3
4
5
6
7
char a[5][10] - 10 максимум символов в слове;
 
for(int x=0;x<5;++x)
{
for(int y=0;a[x][y] !="\0";++y)
std::cout<<a[x][y];
}
Добавлено через 22 минуты
Все оказалось проще чем я думал
0
zss
Модератор
Эксперт С++
6537 / 6099 / 2009
Регистрация: 18.12.2011
Сообщений: 15,866
Завершенные тесты: 1
11.08.2013, 21:14 #6
C++
1
2
3
4
5
6
char a[1000][5]  //- 5 строк по 1000 символов;
 
for(int x=0;x<5;++x)
    strcpy(a[x],"ocherednaya stroka");
for(int x=0;x<5;++x)
    std::cout<<a[x];
1
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
12.08.2013, 00:59  [ТС] #7
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "iostream"
#include <string.h>
#include <time.h>
 
int main()
 
{
    srand(time(NULL));
    setlocale(LC_ALL,"Russian");
    const int a=5;
    const int b=100;
    int y=0;
    int c=0;
    
    char *article[a]={"the","a","one","sone","any"};
    char *noun[a]={"boy","girl","dog","town","car"};
    char *verb[a]={"drove","jumped","ran","walked","skipped"};
    char* preposition[a]={"to","from","over","under","on"};
    char all[b][10]={0};
while(y!=100)
{
c=rand()%4;
strcpy(all[y],article[c]);
strcat(all[y]," ");
y++;
 c=rand()%4;
strcpy(all[y],noun[c]);
strcat(all[y]," ");
y++;    
c=rand()%4;
strcpy(all[y],verb[c]);
strcat(all[y]," ");
y++;
c=rand()%4;
strcpy(all[y],preposition[c]);
strcat(all[y],".");
y++;
 
 
}
for(int x=0;x<100;++x)
{
 for(int q=0;all[x][q]!='\0';++q)
 {
     if(x%4==0 && q==0)
     {
         all[x][q]=toupper(all[x][q]);
     }
 
 
     std::cout<<all[x][q];
         if(all[x][q]=='.')
std::cout<<"\n";
         
 }
 
 
 
}
system("pause");
return 0;
}
0
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
12.08.2013, 01:42 #8
Очень просто, бегаете по массиву букв. Первое условие ( если точка, тогда str[i+1](+1 потому-что всегда пробел после точки, strcpy(str[i+1],toupper(str[i+1]));.
0
12.08.2013, 01:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2013, 01:42
Привет! Вот еще темы с ответами:

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

Написать программу, меняющую первую букву каждого слова на эту же букву верхнего регистра - C++
Дан массив из 10 строк по 80 символов, требуется заменить первую букву в каждом слове на эту же букву верхнего регистра(например: вводим...

Дана строка латинских букв. После заглавной буквы поставить вставить эту же прописную букву и наоборот - C++
Дана строка латинских букв. После заглавной буквы поставить вставить эту же прописную букву и наоборот. Добавлено через 1 час 11 минут...

Работа со строками ( сделать так, чтобы введенные символы с пробелом выводились в виде идентификаторов) - C++
Здравствуйте! Столкнулась с такой проблемой: Не получается сделать так, чтобы введеные символы с пробелом выводились в виде...


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

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

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