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

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

Войти
Регистрация
Восстановить пароль
 
Andriy24
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 35
#1

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

25.11.2012, 18:12. Просмотров 745. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2012, 18:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа удаляет все слова начинающиеся со строчной буквы (пояснить код) (C++):

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

Написать программу, которая удаляет из текстового файла слова, начинающиеся и оканчивающиеся на гласные буквы - C++
//Написать программу, которая удаляет из текстового файла слова, начинающиеся и оканчивающиеся на гласные буквы. #include &lt;stdio.h&gt; ...

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

Вывести все слова начинающиеся с заглавной буквы - C++
С клавиатуры вводится строка S. Она содержит различные символы и пробелы. Части строки, разделенные пробелами, называются словами. Вывести...

Вывести все слова начинающиеся с заданной буквы. - C++
Не могу создать программу. Задание (Текст слов вводится с клавиатуры через запятую. Затем вводится буква. Нужно вывести все слова...

Выделить в строке s1 все слова,начинающиеся с гласной буквы - C++
5)Примечание: СЛОВО-это группа символов не содержащих пробелов ПРЕДЛОЖЕНИЕ-это совокупность слов,разделенных пробелом и заканчивающаяся...

7
c00le®
138 / 138 / 12
Регистрация: 20.03.2009
Сообщений: 235
25.11.2012, 18:42 #2
Цитата Сообщение от 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
Andriy24
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 35
25.11.2012, 18:48  [ТС] #3
Цитата Сообщение от 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
2048 / 1893 / 172
Регистрация: 25.03.2012
Сообщений: 6,512
Записей в блоге: 1
25.11.2012, 19:07 #4
а где ты тут вообще видишь i ???
str - это указатель на символ в строке b, в данном случае на первый символ в слове.

C++
1
2
3
4
char b[] = "So Many many : many , Words"
      ---------^
      |
char* str = strtok(b, " ,.:");
0
Andriy24
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 35
25.11.2012, 19:13  [ТС] #5
Я не понимаю почему 0? Кто-то объяснить?
0
Kuzia domovenok
2048 / 1893 / 172
Регистрация: 25.03.2012
Сообщений: 6,512
Записей в блоге: 1
25.11.2012, 19:14 #6
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
Andriy24
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 35
25.11.2012, 20:17  [ТС] #7
Цитата Сообщение от 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
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
30.11.2012, 14:43 #8
Andriy24, потому что:
1. Массивы в С/С++ нумеруются с нуля.
2. strtok модифицирует анализируемую строку и при каждом следующем вызове (при первом вызове её надо передать строку для разбиения, при последующих для продолжения работы с той же строкой - NULL) возвращает указатель на очередной её элемент, который она выделила. Таким образом, в начале каждой итерации массива str будет указывать на следующее слово строки, и первая буква этого слова относительно str будет именно str[0].
1
30.11.2012, 14:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2012, 14:43
Привет! Вот еще темы с ответами:

Удалить из сообщения все слова, начинающиеся с заглавной буквы - C++
Вот код,для нахождения слов с заглавной буквы,а вот удалить не придумал как,знаю,что вроде с помощью операции s.erase(i,n) #include...

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

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

Вывести все слова, начинающиеся с большой буквы, из заданной строки - C++
С клавиатуры вводится строка S. Она содержит различные символы и пробелы. Части строки, разделенные пробелами, называются словами. ...


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

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

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