2016-12-17 19 views
0

例: "。。ジョン・ドウ(45)ブラックトールブラウン目"文字列[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; 
} 

と、これは入力

ある

+3

出力として何をしたいですか? "ジョン・ドゥ(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; 
} 
関連する問題