我想创建一个可以在长字符串中找到字符的程序... 。
int i = 0;
char buf[100];
char ch[10];
char *res;
int len = 0;
int j = 0;
printf("Enter characters: ");
while(1){
j = getchar();
if(j == '\n') break;
ch[i++] = j;
}
ch[i] = '\0';
while(len < 1){
printf("Enter a sentence: ");
res = fgets(buf, 200, stdin);
len = strlen(buf);
}
此处的示例执行屏幕。
输入字符:mkn
输入一句话:我的儿子在上小学。
查找..
- 我的 儿子 在
我想用strtok()和strchr()制作这个程序......但我对指针感到困惑....
答案 0 :(得分:1)
虽然它们可能不是此目的的最佳选择,但您可以使用strtok()
和strchr()
达到您想要的效果。下面是我如何构建您已经拥有的工作解决方案:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define CHARACTERS_MAXIMUM 32
#define BUFFER_MAXIMUM 1024
int main() {
char characters[CHARACTERS_MAXIMUM];
int characters_length = 0, character;
printf("Enter characters: ");
while (characters_length < CHARACTERS_MAXIMUM - 1) {
character = getchar();
if (character == '\n') {
break;
}
characters[characters_length++] = tolower(character);
characters[characters_length++] = toupper(character);
}
characters[characters_length] = '\0';
char buffer[BUFFER_MAXIMUM], *result = NULL;
int buffer_length = 0;
while (buffer_length < 1 || result == NULL) {
printf("Enter a sentence: ");
if ((result = fgets(buffer, BUFFER_MAXIMUM, stdin)) != NULL) {
buffer_length = strlen(buffer);
}
}
char *token = strtok(buffer, " ");
while (token != NULL) {
for (int i = 0; i < characters_length; i++) {
if (strchr(token, characters[i]) != NULL) {
printf("%s ", token);
break;
}
}
token = strtok(NULL, " ");
}
printf("\n");
return 0;
}
请注意,这不是一个已完成的程序,您应该执行更多/更好的错误检查以及其他调整以正确完成它。
使用示例
> ./a.out
Enter characters: mkn
Enter a sentence: My son is in elementary school.
My son in elementary
>
虽然以上是strtok()
的恰当用法,但请注意。它是较早时代的工件,应该避免使用更安全,更现代的库函数,如strsep()
或strtok_r()
。