Передача в функцию массива строк — КиберПедия 

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...

Передача в функцию массива строк

2020-08-21 115
Передача в функцию массива строк 0.00 из 5.00 0 оценок
Заказать работу

Передача в функцию массива строк выполняется какпередача массива указателей (этот прием может использоваться и для любых двумерных массивов), поэтому возможна без указания количества строк. Например:

void print (char *m[ ]);

int main ()

{char *s[]={"odin", "dwa", "try", 0 };

print (s);

_getch();

return 0;

}

void print (char *m[ ])

{for (int i=0; m[i]; ++i)

cout << m[i] <<endl;

}

Примеры работы со строками

Определение длины строки с помощью функции пользователя

int dlina_str (const char*);

int main()

{const int MAX = 80;

char buffer[MAX]="";

int count = 0;

while (true)

{ cout << "Enter a string < 80 characters:\n";

   cin.getline(buffer, MAX);     

   if (! strcmp(buffer,"")) break; //если введена пустая строка, то выход

   count= dlina _ str (buffer);        //вызов функции определения длины строки

   cout << endl << buffer << " " << count << endl;

}

return 0;

}  

int dlina_str (const char* buf)

{ int k=0;

for(; buf[k]; k++);

return k;

}

 

Реверс строки ( перегрузка функций )

#include <string.h>

void rev_str (char *s); //прототип функции реверса строки s

                    // прототип функции реверса и пересылки строки

void rev_str (char *in, char *out);  

//--------------------------------------------------------------

int main()

{ char s1[80], s2[80];  //определение символьных массивов

strcpy (s1, "abcdef");

rev_str (s1, s2);

cout << s2 <<"\n";

rev_str (s1);

cout << s1 <<"\n";

_getch();

return 0;

}

//--------------------------------------------------------------

//реверс строки по адресу s

void rev_str(char *s)    

 {int i, j;

 char temp[80];

 for (i=strlen(s)-1, j=0; i>=0; i--, j++)

                        temp[j] = s[i];

 temp[j] = '\0';

 strcpy (s, temp);

}

//--------------------------------------------------------------

//реверс строки in и передача результата по адресу out

void rev_str(char *in, char *out)    

{ int i, j;

 for (i=strlen(in)-1, j=0; i>=0; i--, j++)

                        out[j] = in[i];

 out[j] = '\0';

}

Удаление начальных пробелов из строки

#include <string.h>

int main ()

{ unsigned char sst[80];  

unsigned char dst[80];  

int i=0, j=0;

cout << "\nInput string" << endl;   

while ((sst[i] = _getch())!='\r') //посимвольный ввод в массив sst

                         _putch (sst[i++]); //и вывод

sst[i] = '\0';                             //завершение строки

i=0;

while (sst[i] && sst[i] == ' ') //пока в строке есть символ и это пробел

                    i++; //ищем символ, отличный от пробела

while (sst[i])              //если еще не конец строки

          dst[j++] = sst[i++]; //копируем символы

dst[j] = '\0'; //если конец копируемой строки sst,то завершаем строку dst

cout << "\n" << dst << endl;

_getch();

return 0;

}

Обратите внимание, что пропуск пробелов в строке s, начиная с позиции start, реализует также цикл:

for (int i=start; isspace (s[i]); i++);

Проверка, является ли строка целым числом

int main ()

{ char st[40];  

int i;

cout << "\nInput string " << endl;   

cin >> st;

i=0;

while (st[i] >= '0' && st[i] <= '9')

                 i++;

cout << "string: " << endl;

if (st[i])         // st[i] есть '\0', если введены только цифры

       cout <<"NOT number \n" << endl;

else    

        cout <<"YES number\n"<< endl;

_getch();

return 0;

}

Проверка, является ли строка 16-ичным целым числом

#include <string.h>

int main ()

{

char st[20];  

int i;

cout <<"\nInput 16 c/c" << endl;   

cin >> st;

strupr (st);   //преобразует строчные буквы в прописные, <string.h>

i=0;

while ((st[i] >= '0' && st[i] <= '9') || (st[i] >= 'A' && st[i] <= 'F'))

                                                              i++;

cout << "string ";

if (st[i])      // если st[i]!= '\0', то i номер первого ошибочного символа

        cout << "NOT 16" << endl;

else

         cout << "YES 16" << endl;

_getch();

return 0;

}

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

int main ()

{

char st[20];  

int i=0, ok = 0;

cout << " \nInput abc.def " << endl;   

cin >> st;

if (st[i] >= '1' && st[i] <= '9')

        { while (st[i] >= '1' && st[i] <= '9') i++;

          if (st[i] == '.')

                  { i++;

                    if (st[i] >= '1' && st[i] <= '9')

                             { while (st[i] >= '1' && st[i] <= '9')
                                                                  i++;

                               ok = 1;

                    }

           }

}

cout << "string:" << st << endl;

if (st[i] ||!ok)

        cout << "NOT abc.def" << endl;

else     

        cout << " YES abc.def" << endl;

_getch();

return 0;

}

Перевод  двоичного числа в  десятичное

#include <string.h>

int main ()

{

char bin[16];  

long int dec=0;  

int i, v = 1;

cout << " \nInput number 2c/c (8 bit): " << endl;   

cin >> bin;

for (i= strlen(bin)-1; i>=0; i--)

              {

                if (bin[i] == '1')

                              dec +=v;

                 v *=2;              //вес следующего разряда

                }              

 cout << "2:" << bin <<endl;

 cout << "10:" << dec << endl;

_getch();

return 0;

}

Перевод  шестнадцатеричного числа в десятичное

#include <string.h>

int main ()

{char st[5];  

unsigned int dec;   

int i, v=1, err = 0;     // err = 1 – в строке недопустимый символ

cout << " \nInput 16 (<=FFFF):" << endl;   

cin >> st;

strupr (st);

dec=0;

for (i= strlen(st) -1; i>=0; i--)

    { if (st[i] >= '0' && st[i] <='9')

                     dec +=v * (st[i]-'0');   //(int) '0' = 48 и т.д.

     else

         if (st[i] >= 'A' && st[i] <='F') //(int) 'A' = 65 и т.д.

                                 dec +=v * (st[i]-55);

         else       //недопустимый символ

            {err =1; break;

         }

     v *=16;          //вес следующего разряда

 }              

 if (!err)

        cout << "16: --> 10: \n" << st << " --> " << dec << endl;

 else

          cout << "string:” << st <<” NOT 16-number" << endl;

_getch();

return 0;

}


Поделиться с друзьями:

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.018 с.