如何只打印字符串[C]中的第一个句子?

时间:2016-12-17 13:52:05

标签: c string input printing strstr

示例:

void stringEvaluation(char *name){
    if (strstr(name, "Tall") != NULL)
        --here I would like to print only "John Doe"--

}

int main{
    char name[160 + 1];
    scanf("%[^\n]%*c", name);

    stringEvaluation(name);

return 0;
}

这是输入

“约翰·多伊(45岁)。黑色。高大。布朗眼睛”

3 个答案:

答案 0 :(得分:1)

您的要求不清楚。例如,执行以下操作。

#include <stdio.h>
#include <string.h>
#include <ctype.h>

void stringEvaluation(const char *s){
    const char *p;

    if(s == NULL || *s == '\0'){
        puts("invalid format.");
        return ;
    }
    (p = strchr(s, '(')) || (p = strchr(s, '.'));
    if(p == NULL){
        puts("invalid format.");
        return ;
    }
    //find end
    while(!isalpha((unsigned char)p[-1]))
        --p;
    while(s < p)
        putchar(*s++);
}

int main(void){
    char name[160 + 1] = "";
    scanf("%160[^\n]%*c", name);

    stringEvaluation(name);

    return 0;
}

答案 1 :(得分:0)

我正在使用strtok()来获取名称。请注意,只有在字符串中有“()”时才会有效。

void stringEvaluation(char *name){
    if (strstr(name, "Tall") != NULL)
    {
        char *nameEnd = strtok(name, "("); //Returns address of '('
        if(NULL != nameEnd)
        {
            int nameLength = nameEnd - name - 1; // 1 for space after name.

            char *onlyName = malloc((nameLength + 1) * sizeof(char)); // 1 for terminating '\0'
            if(NULL != onlyName)
            {
                //Copy name part.
                strncpy(onlyName, name, nameLength);
                onlyName[nameLength] = '\0'; //Make onlyName a string

                printf("Name: [%s]\n", onlyName);

                free(onlyName);
                onlyName = NULL;
            }
        }
    }
}

答案 2 :(得分:0)

我假设名字将位于输入字符串的第一位。然后遵循小逻辑将为你工作。

void stringEvaluation(char *name){
    char *p;
    char OutPut[50]={0};
    if (strstr(name, "Tall") != NULL)
    {
        p = strstr(name," ");
        p++;
        p = strstr(p," ");
        strncpy(OutPut,name,(p-name));
        printf("name=%s\n",OutPut);
    }

}