Функция выделяет из строки заданное количество слов, начиная со слова с заданным номером - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д