Количество слов, которые начинаются и заканчивается одинаковыми буквами

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

«Помогите написать» != «напишите за меня»

Выкладывай свой вариант программы, а там, глядишь, кто-то и поможет, если это не будет откровенным бредом «на отвяжись».

Выкладывай свой вариант программы

У меня есть свой вариант программы :)

int main(void)
{   
    using namespace std;
    const int SIZE = 100;   // размер массива

    cout << "Enter a string:\n";
    int i = 0;      // счетчик символов введенного слова
    int j = 0;      // счетчик слов начинающихся и кончающихся на одну и туже букву
    char ch = 0;
    char word[SIZE];
    // цикл пока ввод не равен EOF или не превышает размера массива
    while ((ch = cin.get()) != EOF || i < SIZE) 
    {
        /* если ch != пробелу, новой строке или ТАВ
        присваиваем символы элементам массива */
        if (ch != ' ' && ch != '\n' && ch != '\t')      {
            word[i] = ch;
            i++;
        }
        // если ch == пробелу, новой строке или ТАВ - конец слова
        if (ch == ' ' || ch == '\n' || ch == '\t')
        {
            word[i] = '\0';
            // если первый элемент == последнему - учитываем 
      /* здесь */ if (word[0] == word[strlen(word) - 1])
            {
                j++;
                /* если слово состоит из одной буквы - не учитываем
                (логически слово состоящее из одной буквы начинается
                и заканчивается одной и тойже буквой и его нужно учитывать, 
                в этом случае это условие можно удалить) */
                    if ((word[1]) == '\0')
                        j--;
                }
                i = 0;
            }
        }
        cout << "Total amount of the words: " << j << endl;
        return 0;
    }

В принципе работает, но есть одно но... в проверочном условии

  /* здесь */ if (word[0] == word[strlen(word) - 1])
        {
            j++;
    ...

прописные буквы != строчные буквы. Череп, подскажи пожалуйста, что можно в этом случае сделать.

Перед анализом слова надо привести всё слово к верхнему или нижнему регистру.

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

if (word[0] == word[strlen(word) - 1])
        {
            j++;
    ...

вставил такой код

 /* здесь программа переводит первый или последний символ в нижний регистр, если это прописная буква (согласно таблицы символов AASCII) */

     if (word[0] >= 'A' && word[0] <= 'Z')
            word[0] += 32;          
     if (word[strlen(word) - 1] >= 'A' && word[strlen(word) - 1] <= 'Z')
            word[strlen(word) - 1] += 32;

но это для символов AASCII (разница между строчными и прописными буквами == 32). Насколько переносимым будет этот код? Может для перевода символов в нижний и верхний регистры есть что-то универсальное :)

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.