示例输入:堆栈溢出很棒
搜索字符: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;
}