Функция выделяет из строки заданное количество слов, начиная со слова с заданным номером - C (СИ)
Формулировка задачи:
Помогите написать функцию.
Мой код не работает.
По идее функция должна возвращать указатель на строку - результат.
Я сделал int для возврата значения успешно или не успешно завершилась функция (неуспешные returnы еще не доделал)
Листинг программы
- #define CRT_NO_WARNINGS
- #include <stdio.h>
- #include <conio.h>
- #include <string.h>
- #include <stdlib.h>
- int func (char*, char*, int, int);
- int main () {
- char *A;
- char *B;
- int k, a, b, r;
- printf ("Enter max length:>");
- scanf("%d", &k);
- A = (char*) malloc (sizeof(char) * k);
- B = (char*) malloc (sizeof(char) * k);
- printf ("Enter the string:>");
- flushall();
- gets(A);
- printf ("\nEnter № of the 1-st word>>");
- scanf("%d", &a);
- printf ("\nEnter number of words:>");
- scanf ("%d", &b);
- r = func (A, B, a, b);
- printf ("\nYour string is:%s>", B);
- // puts(B);
- printf ("\nr = %d", r);
- _getch();
- return 0;
- }
- int func (char * str, char * str2, int k, int n) {
- int p=0;
- while (p!=k) {*str++;
- if (*str==' ') ++p; }
- p=0;
- while (p!=n) {str2++; str++;
- *str2=*str;
- if (*str++==' ') ++p; }
- *str2++ = '\0';
- return 0;
- }
Решение задачи: «Функция выделяет из строки заданное количество слов, начиная со слова с заданным номером»
textual
Листинг программы
- #include <stdio.h>
- #include <conio.h>
- #include <string.h>
- #include <stdlib.h>
- void func (char[], char[], int, int);
- int main () {
- char *A;
- char *B;
- int k, a, b;
- printf ("Enter max length:>");
- scanf("%d", &k);
- A = (char*) malloc (sizeof(char) * k);
- B = (char*) malloc (sizeof(char) * k);
- printf ("Enter the string:>");
- _flushall();
- gets(A);
- printf ("\nEnter number of the 1-st word>>");
- scanf("%d", &a);
- printf ("\nEnter number of words:>");
- scanf ("%d", &b);
- func (A, B, a, b);
- printf ("\nYour string is:%s>", B);
- puts(B);
- _getch();
- return 0;
- }
- void func (char * str, char * str2, int k, int n) {
- int p=0, i=0, j=0;
- while (p!=k) {
- if ((*(str+i)==' ' && *(str+i+1)!=' ')) || *(str+i)==' \0')) ++p; i++; }
- p=0;
- while (p!=n) {
- *(str2+j)=*(str+i);
- if ((*(str+i)==' ' && *(str+i+1)!=' ')) || *(str+i)==' \0')) ++p; i++; j++; }
- str2[j] = '\0';
- }
Объяснение кода листинга программы
- Ввод данных:
- Пользователь вводит максимальную длину строки (k) с помощью функции scanf.
- Затем пользователь вводит строку (A) с помощью функции gets.
- Пользователь вводит номер первого слова (a) с помощью функции scanf.
- Затем пользователь вводит количество слов (b) с помощью функции scanf.
- Выделение слов:
- Функция func выделяется слова из строки (A) в строку (B).
- Она начинает с позиции a и выделяет b слов или пока не достигнет конца строки.
- Она использует два указателя, i и j, чтобы перемещаться по строке A и копировать слова в строку B.
- Указатель i перемещается вперед, пока не достигнет следующего слова, проверяя наличие пробелов.
- Указатель j перемещается вперед, копируя слова в строку B.
- Если слово заканчивается пробелом или символом новой строки, функция func копирует следующее слово в строку B.
- В конце функция func добавляет нулевой символ в конец строки B, чтобы обозначить конец строки.
- Вывод результата:
- В основной функции main строка B выводится на экран с помощью функций printf и puts.
- Строка B представляет собой выделенные слова из строки A.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д