-1

次のコードを使用して文(文字列)を読み取り、文の単語を表示しようとしています。本来の表示になりません。私は何を間違っていますか?

#include <stdio.h>
#include <string.h>
#define N 100

int main()
{
    char s[N];
    char words[N][N];
    int i=0;
    int j=0;
    printf("s=");
    gets(s);
    while ((i<strlen(s)) && (s[i]!='.'))
    {
        while (s[i]!= ' ')
        {
            sprintf(words[j],"%c", s[i]);
            i++;
        }
        j++; i++;
    }
    for (i=0;i<j;i++) printf("%s ", words[i]);
    return 0;
}
4

3 に答える 3

0
#include <stdio.h>
#include <string.h>
#define N 100

int main()
{
    char s[N];
    char words[N][N] = {0} ; /* this initial your array to 0 */
    int i=0;
    int j=0;
    printf("s=");
    gets(s);
    while ((i<strlen(s)) && (s[i]!='.'))
    {
        while (s[i]!= ' ')
        {
            sprintf(words[j]+strlen(words[j]),"%c", s[i]); /* this will concat chars in words[j] */
            i++;
        }
        j++; i++;
    }
    for (i=0;i<j;i++) printf("%s ", words[i]);
    return 0;
}
于 2012-11-09T21:11:12.010 に答える
0

while ループのロジックが間違っています。そのはず:

int  k = 0;
while (s[i] != ' ')
    words[j][k++] = s[i++];
words[j][k] = '\0';

また、終了ヌル文字 ( '\0') をwords[]に書き込むことはないため、printf()呼び出しは失敗します。

于 2012-11-09T20:52:56.740 に答える
0

テストされていませんが、アイデアを得る必要があります:

int size = strlen(s);
int start = 0;
for(i = 0; i < size; i++) {
    if (s[i] == ' ') {
        char* word = malloc((i-start)*size(char)+1); // alloc memory for a word
        strcpy(word, s+size(char)*i, i-start); // copy only the selected word
        word[i-start+1] = '\0'; // add '\0' at the end of string
        printf("%s\n", word);
        start = i + 1; // set new start index value
    }
}
于 2012-11-09T20:54:17.710 に答える