С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 22.11.2012
Сообщений: 35

Программа удаляет все слова начинающиеся со строчной буквы (пояснить код)

25.11.2012, 18:12. Показов 1784. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему в этой программе нужно в islower записать именно str[0] ? Почему 0?
Программа удаляет все слова начинающиеся со строчной буквы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cstring>
int main()
{
     char b[] = "So Many many : many , Words", s[100];
    char* str = strtok(b, " ,.:");
     do {
         if (!islower(str[0]))
             {
                strcat(s,str);
                strcat(s," ");
             }
     } 
     while (str = strtok(NULL," ,.:"));
     std::cout<<s;
     std::system("pause");
     return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.11.2012, 18:12
Ответы с готовыми решениями:

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

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

Выделить из строки str1 все слова, начинающиеся с гласной буквы, а из строки str2 - слова, начинающиеся с согласной
Выделить из строки str1 все слова, начинающиеся с гласной буквы, а из строки str2 - слова, начинающиеся с согласной. Образовать строку...

7
138 / 138 / 65
Регистрация: 20.03.2009
Сообщений: 235
25.11.2012, 18:42
Цитата Сообщение от Andriy24 Посмотреть сообщение
Почему в этой программе нужно в islower записать именно str[0] ? Почему 0?
Программа удаляет все слова начинающиеся со строчной буквы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cstring>
int main()
{
     char b[] = "So Many many : many , Words", s[100];
    char* str = strtok(b, " ,.:");
     do {
         if (!islower(str[0]))
             {
                strcat(s,str);
                strcat(s," ");
             }
     } 
     while (str = strtok(NULL," ,.:"));
     std::cout<<s;
     std::system("pause");
     return 0;
}
Насколько я понял, индексы строки отсчитываются с 0, а не с 1
0
0 / 0 / 1
Регистрация: 22.11.2012
Сообщений: 35
25.11.2012, 18:48  [ТС]
Цитата Сообщение от c00le® Посмотреть сообщение
Насколько я понял, индексы строки отсчитываются с 0, а не с 1
Но почему только 0? А не например вот так:
C++
1
2
3
4
5
6
7
8
9
do {
         if (!islower(str[i]))
             {
                strcat(s,str);
                strcat(s," ");
             }
i++;
     } 
     while (str = strtok(NULL," ,.:"));
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
25.11.2012, 19:07
а где ты тут вообще видишь i ???
str - это указатель на символ в строке b, в данном случае на первый символ в слове.

C++
1
2
3
4
char b[] = "So Many many : many , Words"
      ---------^
      |
char* str = strtok(b, " ,.:");
0
0 / 0 / 1
Регистрация: 22.11.2012
Сообщений: 35
25.11.2012, 19:13  [ТС]
Я не понимаю почему 0? Кто-то объяснить?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
25.11.2012, 19:14
str[0]='M'
str[1]='a'
str[2]='n'
str[3]='y'
str[4]=' '
str[5]='m'
str[6]='a'
str[7]='n'
str[8]='y'
str[9]=' '
str[10]=':'
str[11]=' '
str[12]='m'
str[13]='a'
str[14]='n'
str[15]='y'
str[16]=' '
str[17]=','
str[18]=' '
str[19]='W'
str[20]='o'
str[21]='r'
str[22]='d'
str[23]='s'
str[24]=0
0
0 / 0 / 1
Регистрация: 22.11.2012
Сообщений: 35
25.11.2012, 20:17  [ТС]
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
str[0]='M'
str[1]='a'
str[2]='n'
...
str[22]='d'
str[23]='s'
str[24]=0
Здесь вас str меняется а в программе НЕТ! ПОЧЕМУ НЕТ?

Добавлено через 1 час 1 минуту
Ну так кто скажет почему там 0?
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
30.11.2012, 14:43
Andriy24, потому что:
1. Массивы в С/С++ нумеруются с нуля.
2. strtok модифицирует анализируемую строку и при каждом следующем вызове (при первом вызове её надо передать строку для разбиения, при последующих для продолжения работы с той же строкой - NULL) возвращает указатель на очередной её элемент, который она выделила. Таким образом, в начале каждой итерации массива str будет указывать на следующее слово строки, и первая буква этого слова относительно str будет именно str[0].
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.11.2012, 14:43
Помогаю со студенческими работами здесь

Вывести на экран строки, начинающиеся со строчной буквы
Не могу выполнить вывод в memo2 строки начинающие со строчной буквы. В чем проблема? unit Unit2; interface uses Windows,...

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

Удалить все слова начинающиеся с буквы
Удалить из введенного предложения все слова начинающиеся с буквы &quot;s&quot;.

Вывести все слова, начинающиеся с буквы 'С'
Изучаю Паскаль, буду очень благодарен, если поможете))) Слова в строке разделены пробелами. Вывести сначала все слова, начинающиеся с...

Найти все слова, начинающиеся с буквы b
Вообщем, условие задачи:найти все слова,начинающиеся с буквы b.В результате программа выводит &quot;cant open file&quot;. #include...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru