编写一个程序,将字符串分成标记,并用C语言打印 #包括 #包括 #包括 int main(int argc,char*argv[]){ 字符标记[20][256]; 字符输入[256]; char*ctmp; int i=1,cnt=1; printf($); 扫描频率(“%s”,输入); ctmp=strtok(输入“”); while(ctmp!=NULL){ strcpy(令牌[cnt++],ctmp); ctmp=strtok(空,“”); } 而(i

编写一个程序,将字符串分成标记,并用C语言打印 #包括 #包括 #包括 int main(int argc,char*argv[]){ 字符标记[20][256]; 字符输入[256]; char*ctmp; int i=1,cnt=1; printf($); 扫描频率(“%s”,输入); ctmp=strtok(输入“”); while(ctmp!=NULL){ strcpy(令牌[cnt++],ctmp); ctmp=strtok(空,“”); } 而(i,c,string,C,String,我正试图写一个程序,它可以将“”从句子中分割成记号。 但它只适用于第一个单词,而不适用于第二个单词 为什么会这样?我做错了什么吗?scanf会一直读取到一个空白,因此您应该使用fgets,它会一直读取到行的末尾(或EOF,以先发生的为准),因此它应该是: #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, char *argv[]) { char

我正试图写一个程序,它可以将“”从句子中分割成记号。 但它只适用于第一个单词,而不适用于第二个单词


为什么会这样?我做错了什么吗?

scanf
会一直读取到一个空白,因此您应该使用
fgets
,它会一直读取到行的末尾(或EOF,以先发生的为准),因此它应该是:

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

int main(int argc, char *argv[]) {
    char token[20][256];
    char input[256];
    char *ctmp;
    int i = 1, cnt = 1;
    printf("$");
    scanf("%s", input);
    ctmp = strtok(input, " ");
    while (ctmp != NULL) {
        strcpy(token[cnt++], ctmp);
        ctmp = strtok(NULL, " ");
    }
    while (i < cnt) {
        printf("%s\n", token[i]);
        i++;
        system("pause");
    }

    return 0;
}
(有关更多详细信息,请查看)


您读取的行也可能比缓冲区能够容纳的行长,因此您可能需要一个额外的循环来获取整行,并相应地调整缓冲区的大小,或者逐块迭代处理行

scanf
会一直读取到空白处,因此您应该使用
fgets
读取到行尾(或EOF,以先发生者为准),因此它应该是:

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

int main(int argc, char *argv[]) {
    char token[20][256];
    char input[256];
    char *ctmp;
    int i = 1, cnt = 1;
    printf("$");
    scanf("%s", input);
    ctmp = strtok(input, " ");
    while (ctmp != NULL) {
        strcpy(token[cnt++], ctmp);
        ctmp = strtok(NULL, " ");
    }
    while (i < cnt) {
        printf("%s\n", token[i]);
        i++;
        system("pause");
    }

    return 0;
}
(有关更多详细信息,请查看)

您读取的行也可能比缓冲区能够容纳的行长,因此您可能需要一个额外的循环来获取整行,并相应地调整缓冲区的大小,或者逐块迭代处理行

intmain(){

char*s;
s=malloc(1024*sizeof(char));
scanf(“%[^\n]”,s);
s=realloc(s,strlen(s)+1;
整数长度=strlen(s);
如果(长度=1){
char*tokens=strtok(s,“”);
while(令牌!=NULL){
printf(“%s\n”,标记);
令牌=strtok(NULL,“”);
}
}
返回0;
}

int main(){

char*s;
s=malloc(1024*sizeof(char));
scanf(“%[^\n]”,s);
s=realloc(s,strlen(s)+1;
整数长度=strlen(s);
如果(长度=1){
char*tokens=strtok(s,“”);
while(令牌!=NULL){
printf(“%s\n”,标记);
令牌=strtok(NULL,“”);
}
}
返回0;
}

建议
fgets(输入,输入大小,标准输入)
建议
fgets(输入,输入大小,标准输入)
char *s;
s = malloc(1024 * sizeof(char));
scanf("%[^\n]", s);
s = realloc(s, strlen(s) + 1); 
int lengths=strlen(s);
if(lengths<=1000&&lengths>=1){
    char *tokens=strtok(s," ");

while(tokens!=NULL){
    printf("%s\n",tokens);
    tokens=strtok(NULL," ");
}

}



return 0;