示例输入: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;
}
答案 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;
}