2015-09-17 2 views
0

это мой код ниже и что он делает, принимает ввод в переменную string1, а затем мой while цикл токенизирует каждое слово, и я могу достичь цели моего назначение, которое должно перевернуть слова в строке. Ниже моего кода это вывод, и, как вы можете видеть, пробелов нет. Как я могу поместить пробел в финальную строку, подобную исходной строке?Невозможно добавить пробел к строке во время цикла

Код:

int main() 
{ 
    int ch, ss=0, s=0; 
    char x[3]; 
    char *word, string1[100], string2[100], temp[100]={0}; 
    x[0]='y'; 

    while(x[0]=='y'||x[0]=='Y') 
    { 
    printf("Enter a String: "); 
    fgets(string1, 100, stdin); 
    if (string1[98] != '\n' && string1[99] == '\0') { while ((ch = fgetc(stdin)) != EOF && ch != '\n'); } 

    word = strtok(string1, " \n"); 

    while(word != NULL) 
    { 
     s = strlen(word); 
     ss=ss+s; 

     strncpy(string2, word, s+1); 
     strncat(string2, temp, ss); 
     strncpy(temp, string2, ss+1); 

     printf("string2: %s\n",temp);  
     word = strtok(NULL, " \n"); 
    } 




    printf("Run Again?(y/n):"); 
    fgets(x, 2, stdin); 
    while ((ch = fgetc(stdin)) != EOF && ch != '\n'); 
    } 
    return 0; 
} 

Выход:

Enter a String: AAA BBB CCC 
string2: AAA 
string2: BBBAAA 
string2: CCCBBBAAA 
+4

', если (строка1 [98]! = '\ П' && строка1 [99] == '\ 0')' не определен, если 'fgets()' 'NULL' возвращается или читать меньше, чем 98 персонажи. – EOF

+0

Нет пробелов, потому что вы не добавляете белые пробелы! –

+0

Кроме того, последовательность 'strncpy (string2, word, s + 1); strncat (string2, temp, ss); strncpy (temp, string2, ss + 1); 'практически гарантирует, что' temp' закончится без нуль-терминатора. – EOF

ответ

1

Как насчет просто добавить пробелы?

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

int main() 
{ 
    int ch, ss=0, s=0; 
    char x[3]; 
    char *word, string1[100]={0}, string2[200], temp[200]={0}; 
    x[0]='y'; 

    while(x[0]=='y'||x[0]=='Y') 
    { 
    printf("Enter a String: "); 
    fgets(string1, 100, stdin); 
    if (string1[98] != '\n' && string1[99] == '\0') { while ((ch = fgetc(stdin)) != EOF && ch != '\n'); } 

    word = strtok(string1, " \n"); 

    while(word != NULL) 
    { 
     s = strlen(word); 
     ss=ss+s; 

     /* copy the word to the working buffer */ 
     strncpy(string2, word, s+1); 
     /* if this is not the first word, put a space after the word */ 
     if (temp[0] != '\0') strcat(string2, " "); /* add this */ 
     /* concat the previously read words after the new word and a space */ 
     strncat(string2, temp, ss); 
     /* adjust the length of the string for the added space */ 
     ss++; /* add this for space */ 
     /* copy the new result to temp */ 
     strncpy(temp, string2, ss+1); 

     printf("string2: %s\n",temp); 
     word = strtok(NULL, " \n"); 
    } 




    printf("Run Again?(y/n):"); 
    fgets(x, 2, stdin); 
    while ((ch = fgetc(stdin)) != EOF && ch != '\n'); 
    } 
    return 0; 
} 
+0

Спасибо за ваш ответ. Я работал. Хотя, не могли бы вы рассказать мне, почему это сработало. Я не понимаю, что это делает моя программа. –

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