Как найти символ в char

For example I have:

char buff[1000];

I want to search if the string “hassasin” is in that char array. Here is what I have tried.

char word[8] = "hassasin";
char Buffer[1000]=sdfhksfhkasd/./.fjka(hassasin)hdkjfakjsdfhkksjdfhkjh....etc 
int k=0;
int t=0; 
int len=0; 
int sor=0; 
for (k=0; k<1000; k++){ 
    for (t=0; t<8; t++){ 
        if (Buffer[k]==word[t]) len++; 
        if (len==8) "it founds 0.9.1" 
    } 
}

asked Nov 19, 2012 at 9:23

hassasin's user avatar

hassasinhassasin

1411 gold badge1 silver badge7 bronze badges

3

Yes, you can just use strstr for this:

 #include <stdlib.h>
 #include <string.h>

 char buff[1000];
 char *s;

 s = strstr(buff, "hassasin");      // search for string "hassasin" in buff
 if (s != NULL)                     // if successful then s now points at "hassasin"
 {
     printf("Found string at index = %dn", s - buff);
 }                                  // index of "hassasin" in buff can be found by pointer subtraction
 else
 {
     printf("String not foundn");  // `strstr` returns NULL if search string not found
 }

answered Nov 19, 2012 at 9:26

Paul R's user avatar

Paul RPaul R

208k36 gold badges386 silver badges555 bronze badges

2

if the chararray contains stringend or do not end with you can use these code, because strstr will brake on these ones:

#include <stdio.h>
int main()
{
    char c_to_search[5] = "asdf";

    char text[68] = "hello my name is  there is some other string behind it n asdf";

    int pos_search = 0;
    int pos_text = 0;
    int len_search = 4;
    int len_text = 67;
    for (pos_text = 0; pos_text < len_text - len_search;++pos_text)
    {
        if(text[pos_text] == c_to_search[pos_search])
        {
            ++pos_search;
            if(pos_search == len_search)
            {
                // match
                printf("match from %d to %dn",pos_text-len_search,pos_text);
                return;
            }
        }
        else
        {
           pos_text -=pos_search;
           pos_search = 0;
        }
    }
    // no match
    printf("no matchn");
   return 0;
}

http://ideone.com/2In3mr

answered Nov 19, 2012 at 9:41

phschoen's user avatar

phschoenphschoen

2,02116 silver badges25 bronze badges

6

How to find char in a char array by using find function? If I just for loop the vowel then I could have gotten the answer but I’m asked to use std::find.. Thanks.

bool IsVowel (char c) { 

    char vowel[] = {'a', 'e', 'i', 'o', 'u'};            
    bool rtn = std::find(vowel, vowel + 5, c);

    std::cout << " Trace : " << c  << " " << rtn << endl;

    return rtn; 
 }

durron597's user avatar

durron597

31.9k17 gold badges99 silver badges156 bronze badges

asked Oct 30, 2010 at 19:03

Michael Sync's user avatar

Michael SyncMichael Sync

4,80410 gold badges39 silver badges58 bronze badges

bool IsVowel (char c) { 

    char vowel[] = {'a', 'e', 'i', 'o', 'u'};
    char* end = vowel + sizeof(vowel) / sizeof(vowel[0]);            
    char* position = std::find(vowel, end, c);

    return (position != end); 
 }

answered Oct 30, 2010 at 19:14

Maciej Hehl's user avatar

0

Simplifying and correcting

inline bool IsVowel(char c) {
    return std::string("aeiou").find(c) != std::string::npos;
}

See a demo http://ideone.com/NnimDH.

answered Jul 15, 2015 at 17:32

Shreevardhan's user avatar

ShreevardhanShreevardhan

12.1k3 gold badges35 silver badges50 bronze badges

1

std::find(first, last, value) returns an iterator to the first element which matches value in range [first, last). If there’s no match, it returns last.

In particular, std::find does not return a boolean. To get the boolean you’re looking for, you need to compare the return value (without converting it to a boolean first!) of std::find to last (i.e. if they are equal, no match was found).

answered Oct 30, 2010 at 19:06

eq-'s user avatar

eq-eq-

9,97636 silver badges38 bronze badges

2

Looking for the sequence of a character in an array – why drag bool into it. Give a simple straightforward answer if you can.

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    //Position
    int posc(char suit[], char fc, int sz)
        {
            int i = 0;
            do
            {
                if (toupper(fc) == suit[i]) return i;
                else
                i = i + 1;
            } 
            while (i < sz);
            cout << "n Character " << fc << " not available in list";
            return 99;
        }
    int main()
    {
        char suit[] = { 'S', 'D', 'C', 'H' };
        char fc;
        int res;
        int sz = size(suit);
        cout << "n Enter a character: ";
        cin >> fc;
        res = posc(suit, fc, sz);
        cout << "n Sequence no: " << res;
        return 0;
    }

The main & cout frills are added just to show a working solution

answered Sep 29, 2020 at 11:45

user14360918's user avatar

3

1 / 1 / 0

Регистрация: 28.04.2019

Сообщений: 32

1

03.07.2019, 19:08. Показов 8700. Ответов 3


Студворк — интернет-сервис помощи студентам

Дан массив char. Прошу поведать мне способы поиска или обнаружения определенного символа.



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

03.07.2019, 19:08

Ответы с готовыми решениями:

Определение номера определенного символа в char
Всем привет! Нужна помощь.
Имеем такой массив символов:
char alphabet = {‘a’, ‘b’, ‘c’, ‘d’, ‘e’,…

Удаление последнего символа в массиве char
Здравствуйте, создаю массив
chat Text;
GetWindowText(GetDlgItem(hTab, id), Text, 200);

Чтение после символа в массиве char
Как начать записывать содержимое массива переменной char после какого-либо символа и до другого…

поиск определенного элемента в массиве
Задан массив, который состоит из n элементов. Найти элемент для которого сумма элементов, что стоят…

3

MasteRX

11 / 33 / 15

Регистрация: 29.04.2014

Сообщений: 223

03.07.2019, 21:03

2

Лучший ответ Сообщение было отмечено eclerchig как решение

Решение

C++
1
2
3
4
5
6
7
8
#include <cstring>
 
int main(void)
{
    ...
    char * f = strstr(#массив чар#, #что ищем (строка, символ)#); //возвращается указатель на первое вхождение если найдено, если нет нулевой указатель
    ...
}



1



1 / 1 / 0

Регистрация: 28.04.2019

Сообщений: 32

03.07.2019, 21:22

 [ТС]

3

Как я понимаю, если символ не найден, то вернётся NULL?



0



11 / 33 / 15

Регистрация: 29.04.2014

Сообщений: 223

03.07.2019, 22:16

4

Совершенно верно. можете посмотреть в инете полную инфу по функции strstr

Добавлено через 11 минут
Сори strstr вроде как работает только с массивами char.

Вот тут норм сделано: сделано норм



0




поиск символа в массиве Char[]

От: Аноним

 
Дата:  20.10.05 11:28
Оценка:

Привет всем, подскажите пожалуста, как в массиве char найти символ например “Y”(позицию в массиве);
Спасибо


Re: поиск символа в массиве Char[]

От: Аноним

 
Дата:  20.10.05 11:31
Оценка:

И еще, подскажите пожалуйста ссылки по С++ на русскомм и легко читаемы. Если можно Страуструпа не давайте, он есть.


Re[2]: поиск символа в массиве Char[]

От:

Bell

Россия

 
Дата:  20.10.05 11:37
Оценка:

Здравствуйте, Аноним, Вы писали:
Если имеем дело со строкой — strchr. Если с обыкновенным массивом — std::find, например.

А>…Если можно Страуструпа не давайте, он есть. Нет уж, никак нельзя — щас дадим

Любите книгу — источник знаний (с) М.Горький


Re[3]: поиск символа в массиве Char[]

От: Аноним

 
Дата:  20.10.05 11:45
Оценка:

А примерчик?


Re: поиск символа в массиве Char[]

От:

Lexey

Россия

 
Дата:  20.10.05 12:36
Оценка:

Здравствуйте, <Аноним>, Вы писали:

А>Привет всем, подскажите пожалуста, как в массиве char найти символ например “Y”(позицию в массиве);

memchr или strchr, если массив нуль-терминирован.

… << RSDN@Home 1.1.4 stable rev. 510>>

“Будь достоин победы” (c) 8th Wizard’s rule.


Re[4]: поиск символа в массиве Char[]

От:

sadomovalex

Россия

http://sadomovalex.blogspot.com
Дата:  20.10.05 12:55
Оценка:

Здравствуйте, Аноним, Вы писали:

А>А примерчик?

char c[] = {'a', 'b', 'c'};
char* p = std::find(c, c + 3, 'b');

“Что не завершено, не сделано вовсе” Гаусс


Re[3]: поиск символа в массиве Char[]

От:

gear nuke

 
Дата:  20.10.05 21:10
Оценка:

Здравствуйте, Bell, Вы писали:

B>Если имеем дело со строкой — strchr. Если с обыкновенным массивом — std::find, например.

Не то найдёт:

как в массиве char найти символ например “Y”(позицию в массиве);

    char foo[] = "QWERTYUIOPASDFGHJKLZXCVBNM";
    int pos = -1; // символ не найден
    for ( int i = 0; i < sizeof(foo); i++ )
        if ( foo[i] == 'Y' )
        {
            pos = i;
            break;
        }

People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth


Re[4]: поиск символа в массиве Char[]

От:

Phoenickx

 
Дата:  21.10.05 13:06
Оценка:

Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, Bell, Вы писали:


B>>Если имеем дело со строкой — strchr. Если с обыкновенным массивом — std::find, например.


GN>Не то найдёт

А что именно не то найдет?


Re[5]: поиск символа в массиве Char[]

От:

gear nuke

 
Дата:  21.10.05 13:25
Оценка:

Здравствуйте, Phoenickx, Вы писали:

P>А что именно не то найдет?

strchr returns a pointer to the first occurrence of c in str, or NULL if c is not found.
А нужен индекс в массиве.

People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth


Re[6]: поиск символа в массиве Char[]

От: Аноним

 
Дата:  21.10.05 13:34
Оценка:

Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, Phoenickx, Вы писали:


P>>А что именно не то найдет?


GN>strchr returns a pointer to the first occurrence of c in str, or NULL if c is not found.

GN>А нужен индекс в массиве.

Вы щас человека научите на С программировать в стиле бейска. Ищется указатель, а потом вычисляется разность между найденным значением (если оно не NULL) и адресом массива. Это и будет позиция. Если надо 1-based, то прибавить потом 1.


Re[7]: поиск символа в массиве Char[]

От:

gear nuke

 
Дата:  21.10.05 14:37
Оценка:

Здравствуйте, <Аноним>, Вы писали:

А>Вы щас человека научите на С программировать в стиле бейска.

ИМХО стиль бейсика — вызывать где ни попадя библиотечные функции, смысл которых остаётся за кадром.
Я же показал как и почему работает поиск.

А>Ищется указатель, а потом вычисляется разность между найденным значением (если оно не NULL) и адресом массива. Это и будет позиция. Если надо 1-based, то прибавить потом 1.

На x86 это требует лишнюю операцию. Компиляторы это скорее всего нивелируют, но если раелизовать на асме, мой способ компактнее .

People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth


Re[8]: поиск символа в массиве Char[]

От: Аноним

 
Дата:  21.10.05 14:45
Оценка:

GN>На x86 это требует лишнюю операцию. Компиляторы это скорее всего нивелируют, но если раелизовать на асме, мой способ компактнее .

Вообще-то, здесь речь не об асме, а о С++. И на каком именно acme? В x86 есть команда scasb, которая вместе с префиксом rep вообще весь этот поиск реализует. (Правда не факт, что в пентюхах scasb будет рабтать быстрее цикла).


Re[9]: поиск символа в массиве Char[]

От:

gear nuke

 
Дата:  21.10.05 15:17
Оценка:

Здравствуйте, <Аноним>, Вы писали:

А>Вообще-то, здесь речь не об асме, а о С++.

Не я первый поднял вопрос о других языках .

А>И на каком именно acme? В x86 есть команда scasb, которая вместе с префиксом rep вообще весь этот поиск реализует.

rep scasb в этой задаче использовать не получится.

А>(Правда не факт, что в пентюхах scasb будет рабтать быстрее цикла).

Хорошее замечание, только забыли, что пеньтюхов много разных бывает .

People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth


Re[10]: поиск символа в массиве Char[]

От: Аноним

 
Дата:  21.10.05 15:19
Оценка:

GN>rep scasb в этой задаче использовать не получится.

Почему не получится ?


Re[11]: поиск символа в массиве Char[]

От:

gear nuke

 
Дата:  21.10.05 16:10
Оценка:

Здравствуйте, <Аноним>, Вы писали:

GN>>rep scasb в этой задаче использовать не получится.


А>Почему не получится ?

Что загружать в ecx?

People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth


Re[12]: поиск символа в массиве Char[]

От: Аноним

 
Дата:  21.10.05 16:22
Оценка:

Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, <Аноним>, Вы писали:


GN>>>rep scasb в этой задаче использовать не получится.


А>>Почему не получится ?


GN>Что загружать в ecx?

да, согласен. Паскаль рулит (в смысле хранение длины строки в ее начале)


Re[13]: поиск символа в массиве Char[]

От: Аноним

 
Дата:  21.10.05 16:24
Оценка:

+1

Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, gear nuke, Вы писали:


GN>>Здравствуйте, <Аноним>, Вы писали:


GN>>>>rep scasb в этой задаче использовать не получится.


А>>>Почему не получится ?


GN>>Что загружать в ecx?


А>да, согласен. Паскаль рулит (в смысле хранение длины строки в ее начале)

Хотя может и не согласен. Изначально спрашивали про поиск в массиве, а не в строке. А размер массива очевидно известен, его в ecx и загрузим


Re[13]: поиск символа в массиве Char[]

От:

gear nuke

 
Дата:  21.10.05 17:15
Оценка:

Здравствуйте, <Аноним>, Вы писали:

А>Паскаль рулит (в смысле хранение длины строки в ее начале)

Отец Паскаля уже так не считает .

Component Pascal Language Report:

6.6 String Types

Values of a string type are sequences of characters terminated by a null character (0X). The length of a string is the number of characters it contains excluding the null character.
Strings are either constants or stored in an array of character type. There are no predeclared identifiers for string types because there is no need to use them in a declaration.
Constant strings which consist solely of characters in the range 0X..0FFX and strings stored in an array of SHORTCHAR are of type Shortstring, all others are of type String.

(стандартный CHAR двубайтный)

В общем-то логично — приходится иметь дело с API требующими 0 в конце строки. В одном проекте мне пришлось использовать fucked string, как раз по этой причине . Хотя длина хранится из других соображений — используется как в некотором роде хэш.

P.S. Строчки до сих пор остаются слабым звеном всего ПО — только что копировал 200 строк из таблицы OpenOffice в Janus — ждал 2 секунды

People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth


Re[14]: поиск символа в массиве Char[]

От:

gear nuke

 
Дата:  21.10.05 17:20
Оценка:

Здравствуйте, <Аноним>, Вы писали:

А>Хотя может и не согласен. Изначально спрашивали про поиск в массиве, а не в строке. А размер массива очевидно известен, его в ecx и загрузим

Ну вот видите — как легко запутать простыми строчками даже опытного человека . Так что ИМХО всё же лучше начинать изучение строчек руками, безо всяких функций, тогда и для конкретной жизненной задачи можно будет найти оптимальное решение.

People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth

Подождите ...

Wait...

  • Переместить
  • Удалить
  • Выделить ветку

Пока на собственное сообщение не было ответов, его можно удалить.

В данной теме решаются некоторые задачи с использованием строк символов. При решении этих задач используются стандартные функции из библиотеки «string.h».

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


Содержание

  • 1. Задачи на поиск символа в строке. Примеры
  • 2. Задачи на замену символов. Пример
  • 3. Задачи на определение позиции заданного символа. Примеры
  • 4. Задачи на преобразование текста. Примеры
  • 5. Задачи на подсчет числа символов в тексте. Примеры
  • 6. Сортировка строк символов методом вставки. Пример
  • Связанные темы

Поиск на других ресурсах:

1. Задачи на поиск символа в строке. Примеры

Пример 1. Задана строка символов. Определить, есть ли заданный символ c в этой строке символов.

// поиск символа в строке
char S[50]; // строка символов
char c; // искомый символ
int i;
bool f_is; // f_is=true - символ есть в строке, иначе f_is=false

// ввод строки S
// ...
// ввод символа c
// ...

for (i=0; i<strlen(S); i++)
    if (S[i]==c)
    {
        f_is = true; // символ c есть в строке S
        break;
    }

if (f_is)
    label1->Text = "Символ " + c.ToString() + " есть в строке";
else
    label1->Text = "Символа " + c.ToString() + "нет в строке";

В данном примере для определения длины строки S используется функция

strlen(S)

Эта функция возвращает число символов в строке без учета последнего символа ‘’. Чтобы использовать эту функцию в Visual C++ нужно в начале файла перед определением пространства имен подключить одну из библиотек <string.h> или <cstring>. Для этого нужно набрать одну из строк:

#include <string.h>

или

#include <cstring> 

Пример 2. Пусть задан некоторый текст. Вычислить, сколько раз повторяется наперед заданный символ a.

// нахождение числа вхождений символа в строке
char S[50]; // строка символов
char a; // заданный символ
int i;
int k; // результат - число вхождений символа a в строке S

// ввод строки S
// ...
// ввод символа a
// ...

k = 0; // в начале обнулить счетчик k
for (i=0; i<strlen(S); i++)
    if (S[i]==a)
        k++; // увеличить счетчик на 1

Пример 3. В данном тексте посчитать число символов ‘+’ и ‘ — ‘.

// подсчет числа символов в строке
char str[50]; // заданный текст
int i;
int n_p; // результат - число символов '+'
int n_m; // результат - число символов '-'

// ввод массива str
// ...

n_p = 0;
n_m = 0;
for (i=0; i<strlen(str); i++)
{
    if (str[i] == '+')
        n_p++;
    if (str[i] == '-')
        n_m++;
}

2. Задачи на замену символов. Примеры

Пример 1. В заданном тексте заменить все символы ‘+’ на ‘ — ‘.

// замена символов
char str[50]; // заданный текст
int i;

// ввод текста
// ...

for (i=0; i<strlen(str); i++)
    if (str[i] == '+')
        str[i] = '-';


Пример 2. Пусть дано несколько строк текста (двумерный массив символов). Заменить все символы ‘+’ на ‘ — ‘.

// замена символов в массиве строк
char str[5][50]; // заданный массив, который содержит 5 строк
int i, j;

// ввод массива из 5 строк
// ...

for (i=0; i<5; i++)
    for (j=0; j<strlen(str[i]); j++)
        if (str[i][j] == '+')
            str[i][j] = '-';

Пример 3. В заданном тексте заменить все символы ‘+’ на ‘+++’.

Данная задача легко решается с помощью введения вспомогательного массива в текст программы.

// замена символов '+' на '+++'
char str[50]; // заданный текст
int i, j;
char str2[150]; // вспомогательный массив

// ввод массива str
// ...

j = 0; // текущая позиция в массиве str2
for (i=0; i<strlen(str); i++)
    if (str[i] == '+')
    {
        str2[j++] = '+';
        str2[j++] = '+';
        str2[j++] = '+';
    }
    else
    {
        str2[j] = str[i];
        j++;
    }

// добавить символ конца строки
str2[j] = '';
strcpy(str, str2); // скопировать str2 в str

В листинге используется функция strcpy() из библиотеки <string.h> (или cstring), которая копирует одну строку в другую.

Пример 4. В заданном тексте заменить последовательность символов ‘…’ на ‘ . ‘.

// замена символов '...' на '.'
char str[50]; // заданный текст
int i, j;
char str2[50]; // вспомогательный массив
int d;

// ввод массива str
// ...

j = 0; // текущая позиция в массиве str2
d = strlen(str); // длина строки str

for (i=0; i<d; i++)
    if (i<d-2)
    {
        if ((str[i]=='.')&&(str[i+1]=='.')&&(str[i+2]=='.'))
        {
            str2[j++] = '.';
            i+=2;
        }
        else
        {
            str2[j++] = str[i];
        }
    }
    else
    {
        str2[j++] = str[i];
    }

// добавить символ конца строки
str2[j] = '';
strcpy(str, str2); // скопировать вспомогательный массив в исходный

Так же, как и в предшествующем примере, вводится вспомогательный массив. В исходном массиве происходит проверка на последовательность символов ‘…’

if ((str[i]=='.')&&(str[i+1]=='.')&&(str[i+2]=='.'))

Если такая последовательность найдена, то к вспомогательному массиву добавляется ‘.’

str2[j++] = '.';
 i+=2;

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

str2[j++] = str[i];

3. Задачи на определение позиции заданного символа. Примеры

Пример 1. Дана некоторая строка символов. В заданном тексте определить позицию первой точки ‘ . ‘. Считать, что первый символ в строке имеет позицию 1.

// поиск первого вхождения символа в тексте
char str[50]; // заданный текст
int i;
int pos; // искомое значение - позиция

// ввод массива str
// ...

pos = -1;

for (i=0; i<strlen(str); i++)
    if (str[i]=='.')
    {
        pos = i+1; // запомнить позицию
        break; // выход из цикла, дальнейшее выполнение цикла не имеет смысла
    }

if (pos == -1)
    label1->Text = "Символ отсутствует в тексте.";
else
    label1->Text = pos.ToString();

Пример 2. Задана некоторая строка символов. Определить позицию последней точки ‘ . ‘ в тексте.

// поиск последнего вхождения символа в тексте
char str[50]; // заданный текст
int i;
int pos; // искомое значение - позиция

// ввод массива str
// ...

pos = -1;

for (i=strlen(str)-1; i>=0; i--) // просмотр строки от конца к началу
    if (str[i]=='.')
    {
        pos = i+1; // запомнить позицию
        break; // выход из цикла, дальнейшее выполнение цикла не имеет смысла
    }

if (pos == -1)
    label1->Text = "Символ отсутствует в тексте.";
else
    label1->Text = pos.ToString();

4. Задачи на преобразование текста. Примеры

Пример 1. Задана некоторая строка символов. Создать новую строку, которая образована из данной чтением от конца до начала.

// обращение строки
char str[50]; // заданная строка
char str2[50]; // результирующая строка
int i;
int d;

// ввод массива str
// ...

d = strlen(str);

for (i=0; i<d; i++)
    str2[d-i-1] = str[i];

// добавить символ конца строки
str2[d] = '';

Пример 2. Задано слово. Проверить, читается ли это слово слева направо и наоборот.

// проверка строки
char str[50]; // заданная строка
int i;
int d;
bool f_yes; // результирующая переменная

// ввод массива str
// ...

d = strlen(str);
f_yes = true;
for (i=0; i<d/2; i++) // просмотр строки от конца до начала
    if (str[i] != str[d-i-1])
        f_yes = false;

if (f_yes)
    label1->Text = "Строка читается слева направо и наоборот";
else
    label1->Text = "Строка не читается слева направо и наоборот";

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

// проверка двух слов на обратимость
char str1[50]; // строка 1
char str2[50]; // строка 2
int i;
int d1, d2;
bool f_yes; // результирующая переменная

// ввод массивов str1, str2
// ...
 
d1 = strlen(str1);
d2 = strlen(str2);

f_yes = true;

if (d1 == d2) // проверка длин строк на совпадение
{
    for (i=0; i<d1; i++)
        if (str1[i] != str2[d1-i-1])
            f_yes = false;
}
else
    f_yes = false;

if (f_yes)
    label1->Text = "Слова есть обратными между собой";
else
    label1->Text = "Слова не являются обратными между собой";

5. Задачи на подсчет числа символов в тексте. Примеры

Пример 1. Задана строка символов. Подсчитать число символов ‘+’ в этой строке.

// подсчет числа символов '+' в строке
char str[50];
int i;
int k; // результат - число символов

// ввод строки str
// ...

k = 0; // обнулить счетчик

for (i=0; i<strlen(str); i++)
    if (str[i] == '+')
       k++;

// вывод результата
label1->Text = k.ToString();

Пример 2. Задано несколько строк символов. Подсчитать число символов ‘ — ‘ в этих строках.

// подсчет числа символов '-' в массиве из 6 строк
char s[6][50];
int i, j;
int k; // результат - число символов

// ввод строк s
// ...

k = 0; // обнулить счетчик

// вычисление k
for (i=0; i<6; i++)
    for (j=0; j<strlen(s[i]); j++)
        if (s[i][j] == '-')
            k++;

// вывод результата
label1->Text = k.ToString();

Пример 3. Задана строка символов. Подсчитать число слов в этой строке. Считать, что слова разделяются одним из символов ‘ ‘ (пробел), ‘ , ‘ (запятая), ‘ . ‘ (точка).

// подсчет числа слов в строке
char s[50]; // строка символов
int i;
int k; // результат - число слов
bool f; // вспомогательная переменная - определяет конец предшествующего слова

// ввод строки s
// ...

k = 0; // обнулить счетчик
f = true;

// вычисление k
for (i=0; i<strlen(s); i++)
    if ((s[i] == ' ')||(s[i]==',')||(s[i]=='.'))
    {
        f = true; // конец слова
    }
    else
    {
        if (f)
        {
            // начало нового слова
            k++;
            f = false;
        }
    }

// вывод результата
label1->Text = k.ToString();

В вышеприведенном примере с помощью вспомогательной переменной f определяется конец предшествующего слова. Если

f = true

значит был конец предшествующего слова. Иначе, начинается новое слово и счетчик k увеличивается на 1.

Пример 4. Задано несколько строк символов (двумерный массив символов). Подсчитать число слов, которые начинаются из символов ‘a’ или ‘A’. Считать, что слово заканчивается на один из символов ‘ ‘ (пробел), ‘ . ‘ (точка) или ‘ , ‘ (запятая).

// подсчет числа слов в массиве строк
char s[5][50]; // массив строк символов
int i, j;
int k; // результат - число слов
bool f; // вспомогательная переменная - определяет конец предшествующего слова

// ввод массива строк s
// ...

k = 0; // обнулить счетчик

// вычисление k
for (i=0; i<5; i++) // перебор строк
{
    f = true;
    for (j=0; j<strlen(s[i]); j++)
        if ((s[i][j] == ' ')||(s[i][j]==',')||(s[i][j]=='.'))
        {
            f = true; // конец слова
        }
        else
        {
            if (f)
            {
                // начало нового слова
                if ((s[i][j]=='a')||(s[i][j]=='A'))
                    k++;
                f = false;
            }
        }
}

// вывод результата
label1->Text = k.ToString();

6. Сортировка строк символов методом вставки. Пример

Пример. Задано несколько строк символов. Отсортировать эти строки в алфавитном порядке.

// сортировка массива строк методом вставки
char s[5][50]; // массив строк символов
int i, j;
char ts[50]; // вспомогательная строка

// ввод массива строк s
// ...
for (i=0; i<4; i++)
    for (j=i; j>=0; j--)
        if (strcmp(s[j],s[j+1])>0)
        {
            // обменять строки местами
            strcpy(ts, s[j]);
            strcpy(s[j], s[j+1]);
            strcpy(s[j+1], ts);
        }

В вышеприведенном листинге для сравнения строк в лексикографическом порядке используется функция strcmp() из библиотеки <string.h> (cstring). Функция имеет общую форму:

int strcmp(string1, string2);

где string1, string2 – строки, которые сравниваются между собой.

Функция возвращает число:

  • >0, если string1 следует после string2 в лексикографическом порядке;
  • =0, если строки одинаковые;
  • <0, если string1 следует перед string2 в лексикографическом порядке.


Связанные темы

  • Массивы. Определение массива. Одномерные массивы. Инициализация массива
  • Массивы. Двумерные массивы. Массивы строк. Многомерные массивы
  • Массивы. Примеры решения распространенных задач с использованием массивов


Добавить комментарий