Как не вводить строку два раза? - C (СИ)
Формулировка задачи:
нужна помощь с этой программой:
во-первых как исправить функцию checkword, чтобы проверка шла через strchr или strpbrk.
и еще как сделать так, чтобы не вводить строку два раза и при этом всё корректно работало и считало?
#include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> // фильтр цифры, английские буквы char *alf1 = "0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"; // фильтр шестнадцетиричных чисел char *alf2 = "0123456789abcdefABCDEF"; // в функции проверяем, если ли в строке buf символы, которых нет в alf // 1 - все символы строки входят в фильтр // 0 - есть символ, который не входит в фильтр int checkword(char *buf,int len,char *alf,int len2) { for (int i=0;i<len;i++) { int flag = 0; for (int j=0;j<len2;j++) { if (buf[i]==alf[j]) { flag = 1; break; } } if (flag==0) return 0; } return 1; } int main () { char str[500]; printf("Input string: "); gets(str); // получаем слова и подаем их в функцию checkword для проверки, фильтр - alf1 char *pch = strtok (str," "); while (pch != NULL) { // выводим на экран слово, если функция вернула 1 if (checkword(pch,strlen(pch),alf1,strlen(alf1))) printf ("%s ",pch); pch = strtok (NULL, " "); } printf("\nInput string: "); gets(str); // получаем слова и подаем их в функцию checkword для проверки, фильтр - alf2 pch = strtok (str," "); while (pch != NULL) { if (strlen(pch)<=8) // длина не более 8 символов if (checkword(pch,strlen(pch),alf2,strlen(alf2))) { unsigned long n; sscanf(pch,"%lx",&n); // преобразуем шестнадцетиричное число в строке в unsigned long printf("\n Number = %s, res = %lu\n",pch,n); // выводим } pch = strtok (NULL, " "); } getch(); return 0; }
Решение задачи: «Как не вводить строку два раза?»
textual
Листинг программы
int checkword(char *buf,int len,char *alf,int len2)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д