Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
11.08.2013, 16:40     Работа со строками (сделать 1-ю букву каждого предложения заглавной) #1
Привет всем, проблема в следующем- как сделать 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2013, 16:40     Работа со строками (сделать 1-ю букву каждого предложения заглавной)
Посмотрите здесь:

C++ Работа со строками: каждую букву введенного слова записать в массив
C++ Работа со строками (Создать текстовый файл, вывести содержимое на экран, определить длину каждого предложения)
Написать программу, меняющую первую букву каждого слова на эту же букву верхнего регистра C++
Дано два предложения (Распечатать слова из первого предложения, который начинаются на первую букву последнего слова второго предложения) C++
C++ Работа со строками ( сделать так, чтобы введенные символы с пробелом выводились в виде идентификаторов)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
11.08.2013, 17:04     Работа со строками (сделать 1-ю букву каждого предложения заглавной) #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]);
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
11.08.2013, 17:11  [ТС]     Работа со строками (сделать 1-ю букву каждого предложения заглавной) #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]);
Я согласен с Вами, я уже прочитал про функции работы строк, но все равно не нашел ответ на свой вопрос )))
п.с. этот код у меня тоже работал))
Миниатюры
Работа со строками (сделать 1-ю букву каждого предложения заглавной)  
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
11.08.2013, 17:28     Работа со строками (сделать 1-ю букву каждого предложения заглавной) #4
Констатные массивы действительно можно так использовать.
Но если формируете строку, то под нее обязательно выделяйте память.
В строке ищете очередную точку с помощью функции strchr:
C++
1
2
char* pos =all[0][b];
pos=strchr(pos,'.');
соответственно pos+1 - адрес первой буквы следующего предложения
(или терминального нуля).
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
11.08.2013, 18:24  [ТС]     Работа со строками (сделать 1-ю букву каждого предложения заглавной) #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 минуты
Все оказалось проще чем я думал
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
11.08.2013, 21:14     Работа со строками (сделать 1-ю букву каждого предложения заглавной) #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];
MousePro
49 / 30 / 1
Регистрация: 25.04.2013
Сообщений: 366
12.08.2013, 00:59  [ТС]     Работа со строками (сделать 1-ю букву каждого предложения заглавной) #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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2013, 01:42     Работа со строками (сделать 1-ю букву каждого предложения заглавной)
Еще ссылки по теме:

C++ Дана строка латинских букв. После заглавной буквы поставить вставить эту же прописную букву и наоборот
C++ Каждое предложение в тексте сделать с заглавной буквы
Работа со строками. Определить, содержит ли заданное слово букву «д» C++

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

Или воспользуйтесь поиском по форуму:
Bend3r
 Аватар для Bend3r
142 / 129 / 17
Регистрация: 29.07.2012
Сообщений: 681
12.08.2013, 01:42     Работа со строками (сделать 1-ю букву каждого предложения заглавной) #8
Очень просто, бегаете по массиву букв. Первое условие ( если точка, тогда str[i+1](+1 потому-что всегда пробел после точки, strcpy(str[i+1],toupper(str[i+1]));.
Yandex
Объявления
12.08.2013, 01:42     Работа со строками (сделать 1-ю букву каждого предложения заглавной)
Ответ Создать тему
Опции темы

Текущее время: 23:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru