Не работает функция в программе, похоже ошибка где-то с указателями или с типами переменных - C (СИ)
Формулировка задачи:
суть программы, вводится строка, с клавиатуры задается число, если есть слова в строке, в которых есть заданное число случайных цифр, то эти слова нужно удалить...
#include "stdafx.h" #include <iostream> #include <string.h> using namespace std; char* word_kick(char*S, int KOL) { int kol=0; char*beg, *end, *j; while(*S!='\0') { while(*S==' '||*S=='\t'||*S=='\n') S++; if(*S!='\0') { beg=S; while(*S!='\0'&&*S!='\t'&&*S!='\n'&&*S!=' ') S++; end=(S-1); } for(j=beg; j<=end; j++) if('0'<=*j&&*j<='9') kol++; if(kol==KOL) { j=end+1; for(S=beg; *S!='\0'; S++) { S=j; j++; }}} return S;} int _tmain(int argc, _TCHAR* argv[]) { char S[100]; char* t=S; int n; cout<<"vvedite stroku"<<endl; cin.getline(S,100); cout<<"vvedite kol-vo simvolov"<<endl; cin>>n; t=word_kick(S,n); cout<<t; getchar(); getchar (); return 0; }
Решение задачи: «Не работает функция в программе, похоже ошибка где-то с указателями или с типами переменных»
textual
Листинг программы
#include <iostream> using namespace std; char* word_kick(char*S, int KOL) { int kol=0; char*beg, *end, *j,*S0,*S1; S0=S; // запомним начало строки while(*S!='\0') { while(*S==' '||*S=='\t'||*S=='\n') S++; if(*S!='\0') { beg=S; while(*S!='\0'&&*S!='\t'&&*S!='\n'&&*S!=' ') S++; end=(S-1); } kol=0; // Не забываем обнулять счетчик for(j=beg; j<=end; j++) if('0'<=*j&&*j<='9') kol++; if(kol==KOL) { j=end+1; for(S1=beg; *j!='\0'; S1++)// нужна другая переменная { *S1 = *j; j++; } *S1='\0'; // Конец строки тоже надо перенести S=beg+1; // Передвигаем указатель на новое положение слова } } return S0;// Возвратить надо всю строку } int main() { char S[100]; char* t=S; int n; cout<<"vvedite stroku"<<endl; cin.getline(S,100); cout<<"vvedite kol-vo simvolov"<<endl; cin>>n; t=word_kick(S,n); cout<<t; system("pause"); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с потоками ввода-вывода и строками.
- Объявляем функцию word_kick, которая принимает два аргумента: строку S и число KOL.
- Внутри функции объявляем переменные: kol (счетчик), beg, end, j, S0, S1.
- Запоминаем начало строки (S0).
- В цикле while считываем строку до символа '\0'.
- Внутри цикла while проверяем символы на равенство пробелу, табуляции, переносу строки и цифрам.
- Если символ не является концом строки, то считываем данные в переменные beg и end.
- Переменная kol обнуляется.
- В цикле for проходим по символам от beg до end и увеличиваем счетчик kol, если символ является цифрой.
- Если kol равно KOL, то переносим символы из j в S1 и добавляем '\0' в конец строки.
- Перемещаем указатель S на новое положение слова.
- Возвращаем S0.
- В функции main считываем строку и количество слов в нее.
- Вызываем функцию word_kick и сохраняем результат в переменную t.
- Выводим значение t.
- Ждем нажатия клавиши для завершения работы программы.
- Возвращаем 0, что означает успешное завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д