如何在C中用特定字符打印一个单词



示例输入:堆栈溢出很棒

搜索字符:e

输出:ov e rflow AW e some

我编写了一个代码,将字符串逐个划分为单词,但我不知道如何检查和打印结果

#include <stdio.h>
#include <string.h>
int main()
{
char str1[100];
char newString[10][10]; 
int i,j,ctr;
   printf("nn Split string by space into words :n");
   printf("---------------------------------------n");    
printf(" Input  a string : ");
fgets(str1, sizeof str1, stdin);    
j=0; ctr=0;
for(i=0;i<=(strlen(str1));i++)
{
    // if space or NULL found, assign NULL into newString[ctr]
    if(str1[i]==' '||str1[i]=='')
    {
        newString[ctr][j]='';
        ctr++;  //for next word
        j=0;    //for next word, init index to 0
    }
    else
    {
        newString[ctr][j]=str1[i];
        j++;
    }
}
printf("n Strings or words after split by space are :n");
for(i=0;i < ctr;i++)
    printf(" %sn",newString[i]);
return 0;
}

您可以使用 strchr()轻松检查特定chararacter

的字符串
for (i = 0; i < ctr; i++) {
    if (strchr(newString[i], 'e') != NULL) {
        printf(" %sn", newString[i]);
    }
}

在您的代码结束时添加以下几行,以打印过滤的字符串/单词,字符 e

printf("n Strings or words Containing character 'e' :n");
for(i=0;i < ctr;i++)
   if(strchr(newString[i], 'e') != NULL) 
      printf(" %sn",newString[i]);

由于您正在解析str1以找到每个单词的开始和结尾,为什么不使用for loop来检测当前单词是否包含您搜索的字母?p>也有许多小的"错误":不要在for循环中使用" strlen",每次都会调用!相反,检测" 0"!您的结果阵列新闻不安全!它应该是[50] [100],因为您可以输入一个单词的字符串,其中100个字符(SO [1] [100](或50个字母和50个空白(SO [50] [2](。因此,结果数组必须为[50] [100]才能采取任何可能性。

我建议使用strtok分开字符串,并使用strchr检查子字符串是否包含字母 e 。这样,您可以在原始字符串上进行一次循环,并同时执行分裂和检查。这样的东西:

#include <stdio.h>
#include <string.h>
int main ()
{
    char str[] ="Stack Overflow is Awesome";
    char* pch;
    char* pch2;
    //split string by spaces
    pch = strtok (str," ");
    while (pch != NULL)
    {
        //check if the substring contains the letter 'e'
        pch2 = strchr(pch,'e');
        if (pch2 != NULL) {
            printf ("%sn",pch);
        }
        pch = strtok (NULL, " ");
    }
    return 0;
}

相关内容

  • 没有找到相关文章

最新更新