Передача строки в функцию
Я плохо засвоил тему об указателях, и теперь мучаюсь. В мейне надо ввести какую нибуть строку(char[]), потом вызвать некую функцию в которую надо передать ету стркоку, в етой функции строку надо будет использовать в strcmp. как ето сделать. если можно, киньте простой пример, с вызовом ф-ции и ее описанием, дальше сам разберусь.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Передача строки в функцию и возврат строки как результата
Короче товарищи замучился я со строками в си, поскольку перешел из delphi там с этим проблем нет. И.
Передача строки в функцию
Как передать строку s типа string в функцию?

Передача строки в функцию
Здравствуйте. Помогите пожалуйста)) void concatenation_Str(char* string) < char buff; cout.

Передача строки в функцию
Добрый, вечер. Есть функция void Func(wstring st)< wcout<<st.at(i); //убрал ненужное, но смысл.
1178 / 988 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
1 2 3 4 5 6 7 8 9
void f(char *s) { printf("%s\n", s); if (strcmp(s, "abc")==0) printf ("Строка = abc\n"); } main() { char *str = "abc"; f(str); }
Регистрация: 25.07.2016
Сообщений: 4
как подсчитать количество цифр в строке?
1178 / 988 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
Сообщение от Adal 
подсчитать количество цифр
1 2 3 4 5 6
int f(char *s) { int n; for(n=0; *s; s++) if ('0' *s && *s '9') n++; return n; }
![]()
![]()
![]()
![]()
12243 / 7373 / 1734
Регистрация: 25.07.2009
Сообщений: 13,521
Сообщение от Adal 
как подсчитать количество цифр в строке?
Было на форуме много-много раз. В том числе и в таком виде:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#include #include int digits_count(const char * s) { return ( *s ) ? !!isdigit(*s) + digits_count(s + 1) : 0; } int main(void) { char buf[BUFSIZ]; while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) printf("%d digits.\n", digits_count(buf)); return 0; }
Хотите подробностей — поищите, не ленитесь. Разжёвано до последней буковки.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Передача строки в функцию и ее вывод
Добрый день. Есть функция main() которая сначала считывает с клавиатуры 2 строки: password и.

Передача строки в функцию system
можно ли каким либо образом передать system значение String допустим есть string c="primer";.
Передача строки string в функцию
Завтра экзамен а я печатаю строки 😀 Что хочу: ввожу две строки, передаю их в функцию по.
Передача строки в дружественную функцию
Доброго времени суток! Помогите пожалуйста исправить программу( было много попыток, но все тщетно).
Как передать строку в функцию си



Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
Передача строки в функцию
Просматривая статьи о функциях на разных сайтах для новичков в С++, прихожу к выводу, что, зачастую, в примерах показано, как передавать функциям, в качестве параметров, числовые типы данных ( int , float , double и т.д.). Так появилась идея написать данную статью, где на практике хочу показать, как передать строку (она же — массив символов) в функцию в виде параметра. И просто замечательно, что в С++ таких способов несколько. Вы можете выбрать тот, который вам просто понравится или который больше подойдет для решения поставленной перед вами задачи.
Способы передачи строки в функцию хочу показать на одном примере. Чтобы лучше освоить материал и взять максимум пользы от прочитанного, открывайте свою среду разработки и переписывайте код по мере прочтения. Практика – лучший способ что-то понять и запомнить. Под примером будут расположены подробные комментарии и разъяснения по данному коду.
#include using namespace std; //определяем функции void showText1 (char str[])//функция принимает строку, как массив < cout void showText2 (char *str)//указатель *str будет указывать на адрес первого символа в строке < cout void showText3 (char (&str)[150])// адрес строки из 150-ти символов < cout int main()
Задача всех наших созданных функций – отобразить на экране строки, которые переданы им, как параметры. Пойдем по порядку:
1) первый способ — функция void showText1 (char str[]) принимает строку, как массив — строка 4 . П ри определении функции, в круглых скобках надо вписать тип массива (строки) char , имя строки и квадратные скобки [] . Обратите внимание, что нам не надо указывать размерность массива (количество символов в строке). С помощью символа ‘\0′, который автоматически добавляется в конец любой строки , функция сама найдет последний элемент массива и прекратит вывод элементов на экран.
2) второй способ, передача строки в функцию при помощи указателя, самый распространенный вариант — строка 9. При определении функции, перед именем строки ставим оператор * — void showText2 (char *str) .
3) ну и третий способ, передача в функцию строки по адресу — строка 14. В нашем примере это функция void showText3 (char (&str)[150]) . Тут следует быть внимательным, т.к. необходимо указывать точный размер строки. Без этого компилятор выдаст ошибку (Мы проверяли :)). А так же важно взять в круглые скобки оператор & с именем строки — (&str) . В строке 38 нашего кода, вы можете видеть, что строка char str3[150] содержит явно меньше символов. Остальным, не инициализированным, будет присвоено значение ‘\0’ .
Думаю, строки 23-25 говорят сами за себя и комментировать не стоит. Иногда, так удобно сделать, не объявляя и не определяя строку заранее.
При вызове функций все просто – надо лишь внести название необходимой строки в круглые скобки. Строки 29, 34, 39.
CppStudio.com
Можно ввести строку в круглых скобках при вызове функции:
~~~ ~~~ ~~~ cppstudio.com ~~~ ~~~ ~~~
str1 — передаем, как массив в функцию void showText1 (char str[]);
str2 — передаем, в функцию void showText2 (char *str); используя указатель.
str3 — передаем, в функцию void showText3 (char &str[]);
Тут используем адрес строки (адрес первого элемента символьного массива)
А вот еще один пример, который покажет насколько удобно работать с указателем в функциях. В нем функция примет, в качестве параметра, указатель на строку символов, с помощью указателя пройдет по каждой ячейке памяти строки и изменит числовые символы на знак ~ или на букву O . В результате строка, содержащая числовые символы 1234123412341234 и т.д., с легкостью превратится в “новогоднюю гирлянду”. В этом коде указатель покажет себя, как альтернатива управляющей переменной в цикле while :
#include using namespace std; void changeSymbol(char *str) < while(*str != '\0')//пока значение ячейки не равно символу конца строки < if (*str == '4') *str = 'O'; else *str = '~'; str++;//на каждой итерации цикла, указатель смещается на одну ячейку >> int main() < setlocale(LC_ALL, "rus"); char str[] = ; cout << "Исходная строка: " << str << endl << endl; changeSymbol(str);//передаем исходную строку в функцию cout
Смотрите, как интересно получается: как мы знаем, указатель указывает на адрес первой ячейки памяти строки, т.е. в нашем случае на str[0] . Значит, используя операцию разыменовывания указателя * , мы можем посмотреть, какой символ в этой ячейке хранится и, если надо, заменить его на другой — строки 6, 8, 9. Плюс, мы можем использовать указатель на строку, вместо управляющей переменной в нашем цикле while . Для этого, на каждой итерации цикла, инкрементируем указатель str++ — строка 11. Таким образом, указатель будет указывать уже на очередную ячейку памяти нашей строки. Так будет происходить до тех пор, пока указатель не перейдет на ячейку с символом ‘\0’ . Тут цикл while прекратит работу.
Результат — наша «новогодняя гирлянда» 🙂
CppStudio.com
Исходная строка: 12341234123412341234123
Каким способом передать строку в функцию — определяйтесь сами. Если у вас остались вопросы по теме, задавайте их нам в комментариях к этой статье. Мы вам обязательно ответим и поможем разобраться.
Си: передача предопределённых строк в функцию
Всегда думал, что при предопределении строковой переменной *s = «habr» и s[] = «habr» — практически полные синонимы.
Тогда почему в коде ниже (компилировал в GCC, различные версии, на Linux) работает лишь вариант I, а варианты II и III валятся с Segmentation Fault?
// Вариант I #include void test(char *s) < s[2] = 'X'; puts(s); >int main() < char x[] = "123456"; test(x); return 0; >// Вариант II #include void test(char *s) < s[2] = 'X'; puts(s); >int main() < char *x = "123456"; test(x); return 0; >// Вариант III #include void test(char *s) < s[2] = 'X'; puts(s); >int main()
Возможно, это что-то элементарное для языка, но сам я не разобрался.
- Вопрос задан более трёх лет назад
- 6457 просмотров
1 комментарий
Оценить 1 комментарий