0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 29
1

Задать строку (несколько предложений) как массив. Проверить чтоб все предложения начинались с заглавной буквы. Если нет

18.08.2020, 20:52. Показов 480. Ответов 7

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

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
 
int main()
{
    char str[256] = "Enter a line as an array. need to check if sentences begin from capital letters. if not - fix it.";
    int count = 0;
    for (int i = 0; str[i] != '\0'; i++)
    {
        
         if (str[i] >= 'a' && str[i] <= 'z')
        {
             str[i] >= 'A' && str[i] <= 'Z';
        }
 
    }
 
    printf("%s\n", str);
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.08.2020, 20:52
Ответы с готовыми решениями:

Файл: Выяснить, начинаются ли все предложения с заглавной буквы, если нет, то исправить.
Дан текстовый файл.Выяснить начинаются ли все предложения с заглавной буквы ,если нет ,то...

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

В тексте проверить все ли предложения начинаются с заглавной буквы
помогите написать прогу плз! Условие: В тексте проверить все ли предложения начинаюстя с...

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

7
2136 / 1051 / 402
Регистрация: 08.11.2016
Сообщений: 3,018
19.08.2020, 00:17 2
В однобайтовой кодировке латинские заглавные буквы имеют численное значение на 32 меньше чем строчные, потому Вам достаточно будет при встрече вначале предложения строчного символа вычесть из него 32, чтобы получить заглавный.

Также для решения задачи Вам понадобиться массив символов содержащих возможные разделители предложений
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
char delim[] = ".!?"; // разделители предложений
bool isNewSentence = true; // маркер начала нового предложения
for (unsigned i = 0; str[i] != '\0'; ++i)
{
    if (str[i] >= 'a' && str[i] <= 'z' && isNewSentence) // если это начало предложения и оно начинается с маленькой буквы
    {
        str[i] -= 32; // меняем символ
        isNewSentence = false; // сбрасываем маркер начала предложения
    }
    else
    {
        for (unsigned j = 0; delim[j] != '\0'; ++j)
        {
            if (str[i] == delim[j]) // смотрим встретился ли разделитель предложений
            {
                isNewSentence = true; // если да, устанавливаем маркер начала преложения
                break;
            }
        }
    }
}
2
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 29
19.08.2020, 22:14  [ТС] 3
спасибо. думал, что нужно применить bool, но не додумался, что нужно создать еще один массив со знаками

Добавлено через 2 минуты
а объясните, пожалуйста, как сделать поиск подстроки тоже без функций и указателей?
0
2136 / 1051 / 402
Регистрация: 08.11.2016
Сообщений: 3,018
19.08.2020, 22:34 4
skyone, как это: "без функций и указателей"? В смыле без всяких strcmp strncmp? Но это без функций, а вот как тут без указателей? Или Вы о чем?
0
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 29
19.08.2020, 23:04  [ТС] 5
да, Вы правильно поняли. самая простая задачка с массивом. Прошу прощения, неправильно выразился. нужно проверить встречается ли ли вторая строка в первой, то есть изначально задается две
0
2136 / 1051 / 402
Регистрация: 08.11.2016
Сообщений: 3,018
20.08.2020, 07:57 6
skyone, это называется поиск подстроки в строке, удобнее использовать strncmp, но сампальный вариант вобщем прост как 3 копейки
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
bool strInStr(char *substr, char *str)
{
    unsigned len_substr = 0, len_str = 0;
    for (len_substr; sub_str[len_substr] != '\0'; ++len_substr);
    for (len_str; str[len_str] != '\0'; ++len_str);
    if (len_substr > len_str)
        return false;
    unsigned shifts = len_str - len_substr;
    bool found;
    for (unsigned i = 0; i <= shifts; ++i)
    {
        found = true;
        for (unsigned k = 0; k < len_substr; ++k)
        {
            if (substr[k] != str[k + i])
            {
                found = false;
                break;
            }
        }
        if (found)
            break;
    }
    return found;
}
Добавлено через 4 минуты
И да, еще, в С нет типа bool и ключевых слов true/false как в С++, для использования bool в С на подобии С++ надо подключать stdbool.h
1
0 / 0 / 0
Регистрация: 11.05.2016
Сообщений: 29
22.08.2020, 18:16  [ТС] 7
объясните, пожалуйста, что Вы делаете с 8й строки. плохо понимаю
0
2136 / 1051 / 402
Регистрация: 08.11.2016
Сообщений: 3,018
24.08.2020, 08:31 8
skyone, в строке 8 вычисляется разность между длинной строки и длинной искомой подстроки (корректный результат в беззнаковых целых числах гарантируется так как перед этим было проверено что подстрока не длиннее строки). Эта разность означает сколько раз нужно сдвинуть подстроку относительно строки. Далее во внешнем цикле идем по количеству сдвигов, а во вложенном идем по подстроке от начала до конца, а по строке от текущего смещения от начала и до текущего смещения + длина подстроки посимвоььно проверяя равна ли искомая подстрока этой части строки и если нет, то переходим во внешний цикл, где, опять таки, если подстрока не найдена, то переходим к следующему смещению, если же подстрока найдена (то есть вложенный цикл прошел по всем символам подстроки и при этом условие substr[k] != str[k + i] не выполнилось ни разу) то форсированно завершаем внешний цикл, далее возвращаем результат.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.08.2020, 08:31

Подсчитать количество предложений в строке, чтобы они начинались с заглавной буквы и заканчивались"." "?" "!"
Буду очень благодарен

Проверить, все ли имена написаны с большой буквы, если нет, то исправить
Задано десять русских имен. В тексте проверить, все ли эти имена написаны с большой буквы, если...

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

В тексте, содержащем несколько (много) предложений, найти все вхождения заданного слова и распечатать все ключевые его предложения.
помогите решить 3 задачки. заранее большое спасибо всем! 1.P=\prod_{i=m}^{n}(2*i),где n и m...

Все первые слова в предложениях должны быть исправлены в соответствии с правилом заглавной буквы в начале предложения
Записать в файл out.txt текст из файла в in.txt.При этом все первые слова в предложениях должны...

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


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

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

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