在句子中查找字符

时间:2016-10-26 04:14:11

标签: c

我想创建一个可以在长字符串中找到字符的程序... 。

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()制作这个程序......但我对指针感到困惑....

1 个答案:

答案 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()