2014-05-16 2 views
-2

Я пытаюсь сделать одну микс-строку на основе других двух, например, string1 = «Доброе утро» и string2 = «Привет, ребята», поэтому мой скрипт будет выводиться следующим образом: «Добрые привет, ребята».Как я могу создать одну строку на основе двух других?

я почти сделал это .. что я пробовал:

int main() { 
    char frase1[99]; 
    char frase2[99]; 
    int i =0; 
    char frase3[99]; 

    printf("Type a sentence: "); 
    gets(frase1); 
    printf("Type a sentence: "); 
    gets(frase2); 

    char * pch1; 
    char * pch2; 

    pch1 = strtok (frase1," "); 
    pch2 = strtok (frase2," "); 

    while (pch1) { 
    strcat(frase3,pch1); 
    pch1 = strtok (NULL, " "); 

    strcat(frase3,pch2); 
    pch2 = strtok (NULL, " "); 
    } 
    puts(frase3); 
} 

выход: Пример: frase1 = "Доброе утро"; frase2 = «Привет, ребята»; Выход: ошибка

+0

уточните, пожалуйста, о проблеме, с которой вы хотите помочь. В каких условиях ваш код производит нежелательный вывод и каков результат в этих случаях? Это поможет людям помочь вам, и это хорошая практика для точной отчетности об ошибках. – bcr

+0

Нет выхода, я получил ошибку): – user3642969

+0

Для рассмотрения вопроса в будущем ... «Я получил ошибку» почти бесполезен, но сказал: «Я получил следующую ошибку: _insert вставляемое сообщение об ошибке здесь» гораздо полезнее. – mah

ответ

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

int main() { 
    char frase1[99]; 
    char frase2[100] = {' '}; 
    char frase3[sizeof(frase1)+sizeof(frase2)]; 

    printf("Type a sentence: "); 
    scanf("%98[^\n]", frase1); 
    printf("Type a sentence: "); 
    scanf(" %98[^\n]", frase2+1); 

    char *pch1, *pch2, *pch3; 
    int len1, len2; 

    pch1 = frase1; 
    pch2 = frase2; 
    pch3 = frase3; 

    while (*pch1 || *pch2) { 
     if(*pch1){ 
      sscanf(pch1, "%*s%n", &len1); 
      memcpy(pch3, pch1, len1); 
      pch1 += len1; 
      pch3 += len1; 
     } 
     if(*pch2){ 
      sscanf(pch2, "%*s%n", &len2); 
      memcpy(pch3, pch2, len2); 
      pch2 += len2; 
      pch3 += len2; 
     } 
    } 
    *pch3 = '\0'; 
    puts(frase3); 
    return 0; 
} 
2

Ваша задача довольно проста:

  1. strtok не экстрасенс и не имеет ни малейшего представления, что вы хотели, чтобы возобновить ранее лексем, а не один он трудился в последнюю очередь.
  2. Он вернется только NULL Вэнь Цзябао не может вернуть токен, вы проверите для этого слишком поздно.

Возьмите замещающую функцию strtok_s (опция C99 #define __STDC_WANT_LIB_EXT1__ 1) или strtok_r (POSIX), который является возвратным, потому что она не использует статическую внутреннюю память.
Если вы ничего не можете сделать, сохраните первую последовательность, а затем получите вторую.

Следующая проблема будет иметь различное количество токенов в обоих предложениях.

Заключительная проблема, с которой вы столкнетесь (если frase1 и frase2 достаточно длинны) переполнена frase3: Это должно быть как минимум до тех пор, как оба.

+0

Я получаю ошибку, когда набираю strtok_2, разве это не от ? – user3642969

+0

Итак, как я могу добавить его в свою программу? вы можете сделать это для меня ?? Я пытаюсь это сделать .. но я не могу – user3642969

+0

Добавил определение для C99 и по-другому. Попробуй. – Deduplicator

Смежные вопросы