Как не вводить строку два раза? - 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)