如何在C中打印具有特定字符的单词?

时间:2018-04-03 07:17:27

标签: c arrays string multidimensional-array compare

示例输入:Stack Overflow很棒

搜索字符:e

输出:Ov e rflow Aw e 一些

我写了一个代码,用空格分割字符串并存储为单词,但我不知道如何检查和打印结果

#include <stdio.h>
#include <string.h>
int main()
{
char str1[100];
char newString[10][10]; 
int i,j,ctr;
   printf("\n\n 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]=='\0')
    {
        newString[ctr][j]='\0';
        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(" %s\n",newString[i]);
return 0;
}

4 个答案:

答案 0 :(得分:1)

您可以使用strchr()轻松检查字符串中的特定字符

for (i = 0; i < ctr; i++) {
    if (strchr(newString[i], 'e') != NULL) {
        printf(" %s\n", newString[i]);
    }

}

答案 1 :(得分:0)

在代码的末尾添加以下行,以按字符e

打印已过滤的字符串/字词
printf("\n Strings or words Containing character 'e' :\n");
for(i=0;i < ctr;i++)
   if(strchr(newString[i], 'e') != NULL) 
      printf(" %s\n",newString[i]);

答案 2 :(得分:0)

由于您要解析str1以查找每个单词的开头和结尾,为什么不使用for循环来检测当前单词是否包含您搜索的字母?

也有很多小“错误”:不要在for循环中使用“strlen”,每次都会调用!相反,检测'\ 0'! 你的结果数组newString是不安全的!它应该是[50] [100],因为你可以输入一个单词的字符串,其中包含100个字符(所以[1] [100])或50个字母和50个空格(所以[50] [2])。所以结果数组必须是[50] [100]才能采取任何可能性。

答案 3 :(得分:0)

我建议使用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 ("%s\n",pch);
        }
        pch = strtok (NULL, " ");
    }
    return 0;
}