Подсчитать число слов, начинающихся на большую букву и содержащих хотя бы один арифметический знак

Breezeblocks

Подсчитать количество слов, которые начинаются с большой буквы и в слове есть хотя бы один арифметический символ(+-*/%).Написал программу, которая находит в слове большую букву и арифметический символ.Как сделать что бы искал именно первую большую букву?Слова в строке ввожу через пробел.
int Count(char *s)
{
int i, count=0,j;
for(i = 0; s[i] != '\0'; i++)
for(j = 0; s[j] != '\0'; j++)
{
    if((isupper(s[i]))&&(strchr(ARIF,s[j])))
    count++;
}
return count;
printf("count=%d",count);
}
11 ответов

Breezeblocks

можно сделать так
if ((isupper(s[0]) || (isupper(s[i]) && s[i-1] == ' '))  && (strchr(ARIF, s[j])))


Breezeblocks

andreyka93, Если такое условие ставить, то находит нужные слова, но на экран выводит количество символов в нужном слове. А нужно чтобы выводил количество слов, которые удовлетворяют условию. Как это сделать?


Breezeblocks

return count;
printf("count=%d",count);
после return'a функция завершает работу, поэтому нужно поменять местами эти две строчки чтобы получилось вот так
printf("count=%d",count);
return count;


Breezeblocks

andreyka93, Всё равно та же ситуация


Breezeblocks

вот должно работать
int Count(char *s)
{
    int i, count = 0, j;
    for (i = 0; s[i] != '\0'; i++) {
        for (j = 0; s[j] != '\0'; j++)
        {
            if ((isupper(s[0]) || (isupper(s[i]) && s[i - 1] == ' ')) && (strchr(ARIF, s[j])))
                count++;
            
        }
    }
    printf("count=%d", count);
    return count;
}
а если не работает то нужно смотреть увеличивается ли count
int Count(char *s)
{
    int i, count = 0, j;
    for (i = 0; s[i] != '\0'; i++) {
        for (j = 0; s[j] != '\0'; j++)
        {
            if ((isupper(s[0]) || (isupper(s[i]) && s[i - 1] == ' ')) && (strchr(ARIF, s[j])))
                count++;
                printf("count=%d", count);
        }
    }
    return count;
}


Breezeblocks

andreyka93, Так же считает количество букв


Breezeblocks

#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
int Test(char* pszWord)
{
   return (isupper(*pszWord) && (strcspn(pszWord,"+-*/%") < strlen(pszWord)))  ?  1  :  0;
}
 
int main()
{
   char* pszWord = NULL;
 
   char  pszPhrase[256];
 
   int   iCnt = 0;
 
   strcpy(pszPhrase,"Th+e Qui-ck Br*own f/ox ju%mps Over The Lazy Dog + - * / %");
 
   pszWord = strtok(pszPhrase," ");
 
   while (pszWord)  
   {  
      iCnt += Test(pszWord);
  
      pszWord = strtok(NULL," ");
   }  
 
   printf("Count: %d\n",iCnt);
 
   return 0;
}


Breezeblocks

gazlan, а что надо изменить в моем коде программы, чтобы она работала правильно?


Breezeblocks

что надо изменить в моем коде программы, чтобы она работала правильно?
Переписать заново.


Breezeblocks

Подсчитать количество слов, начинающихся на большую букву и содержащих хотя бы один арифметический знак.Работает правильно но выводит не количество нужных слов, а количество символов в нужном слове. Как исправить?
#define ARIF "+-/*%"
int Count(char *s)
{
int i, count=0,j;
for(i = 0; s[i] != '\0'; i++)
for(j = 0; s[j] != '\0'; j++)
{
    if ((isupper(s[0]) || (isupper(s[i]) && s[i-1] == ' '))  && (strchr(ARIF, s[j])))
    count++;
 
}
return count;
printf("count=%d",count);
}


Breezeblocks

Попробуй как-то так.
char *p, *q;
flag = 1;  // флаг начала слова
for(p=s; *p; p++) {
   if (flag && isupper(*p)) {
      for (q=p+1; *q && *q!= ' ') {
         if (strchr(ARIF, *q)) {
           count++;
           break;
         }
      }
   }
   if (*p==' ') flag = 1;
   else flag = 0;
}
Не проверял.