2016-12-17 77 views
0

例子:如何僅打印字符串[C]中的第一個句子?

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

你想要輸出什麼? 「John Doe(45)。」?如果是這種情況,您可以逐個字母地循環輸入字符串,並繼續打印它們,一旦遇到'。'。 ,打破循環。 –

+0

或者你可以簡單地使用strtok。 –

回答

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; 
      } 
     } 
    } 
} 
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); 
    } 

} 
+0

'OutPut'未初始化。 – BLUEPIXY

0

您的請求尚不明確。例如,執行如下操作。

#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; 
} 
相關問題