我必须在字符串中找到字母

时间:2019-03-21 15:43:37

标签: c

我必须编写代码以使实数加倍,但我对此有很多麻烦。

使用此输入的“#5p56.02#”我必须具有“ Invalid!在输入中扫描了p个字符”或“ ### 33 ## 5”,它必须给我输出“ Invalid!有间隔序列在非空白字符之间。”(#表示间隔tho)

#include <stdio.h>

int main()
{
   char str[20];
   int i, frequency = 0;

   printf("Enter a string: ");
   gets(str);

   for(i=0;str[i]!='\n'; ++i)
   {
       if(' '== str[i])
           ++frequency;
   }

   printf("Frequency of %d", frequency);

   return 0;
}

我对此一无所知,我不知道该怎么办。

2 个答案:

答案 0 :(得分:0)

%s将扫描到下一个空格,如果没有特定的掩码,您将无法扫描多个单词。

您可以使用掩码“ [^ \ n]”,该掩码将扫描所有内容,直到出现\ n

#include <stdio.h>
#include <string.h>

int main(void){
   char string[50];
   int i, frequency = 0;

   printf("Enter a string: ");
   scanf("%[^\n]", string);

  for(i=0;i<strlen(string);i++)
   {
       printf("%c,", string[i]);
       if(string[i] == ' ') {
           frequency++; 

       }
   }

   printf("Frequency of %d", frequency);

   return 0;
}

问题是,使用此掩码,您将必须弄清楚如何停止循环,我尝试使用在线编译器,但使用string [i]!='\ n'

时遇到了一些问题

编辑:使用strlen更新,对我来说很好

 printf("%c,", string[i]);

是出于调试原因。

检查一下以了解更多有关口罩的信息 http://personal.ee.surrey.ac.uk/Personal/R.Bowden/C/scanf.html

答案 1 :(得分:0)

要检测“无效!非空白字符之间有一个间隔序列。” 条件,我从字符串的开头和结尾处删除了间隔字符。如果仍存在间隙,则介于其他字符之间:

    char *sp = str;
    while (*sp == '#') ++sp;                    // skip over the leading gaps
    char *ep = sp+strlen(sp);                   // string end position
    while (ep > sp && *--ep == '#') *ep = '\0'; // erase trailing gaps
    if (strchr(sp, '#'))
        puts("Invalid! There is a gap sequence between non-blanket characters."),
        exit(1);

要检测“输入中有无效!扫描的p个字符” 条件,我将尝试转换为double并检查是否存在无法识别的字符:

    double real = strtod(sp, &ep);              // try to convert double
    if (*ep || ep == sp)                        // conversion failed at ep
        printf("Invalid! scanned p character among input\n", *ep), exit(1);
    printf("%f\n", real);