在单词之间拆分字符串并插入换行符

Split a string between words and insert newlines

我有一个由几句话组成的字符串。 例如:

 hello world bye bye

现在,我要把这句话变成一列词:

hello
world
bye
bye

我有这个想法,但我不知道如何正确地写它,所以我希望你们能帮助我。 这是我目前所拥有的:

int len=0, k=0, stopatspace=0;
char temptext[100][15]={0};
char line[300]={0};

   len=strlen(line);
   printf("len is: %d", len);
   for(k=0; k<len; k++)
   {
       if (k == ' ')
       {
           // i dont know what to write here in order to make it a cloumn 
       }
   }

基本上,我的想法是 运行 在我的所有长度上,当我到达 space 我希望它进入(向下一行,这样它看起来像一列)

假设line是包含hello world bye byechar数组,text声明为

char text[100][15]; //I used 100 and 15 because your example contains it

并且您希望将每个单词复制到 text 的每一行中。然后,在循环中使用strtok() function with " "(space) as delimeter and place this in a loop that terminates when strtok() returns NULL to get each word. Copy each word to each row of text using strcpy()

此代码如下所示:

char text[100][15];
char line[]="hello world bye bye";
int i=0;

char *token=strtok(line," ");

while(token!=NULL)
{
  strcpy(text[i],token);
  i++;
  token=strtok(NULL," ");
}

现在,要打印它,您可以使用

for(int j=0;j<i;j++)
  printf("text[%d]=%s",j,text[j]);


另一种方法是手动复制每个字符,直到看到 space。

int len=strlen(line);
int i=0;
int k=0;

for(int j=0;j<len+1;j++)
{
  if(line[j]==' ')
  {
    text[i][k]='[=13=]';
    i++;
    k=0;
  }
  else
  {
    text[i][k]=line[j];
    k++;
  }
}

注意上面的代码并没有阻止buffer overflows。您可以使用

打印每个单词
for(int j=0;j<i+1;j++)
  printf("text[%d]=%s",j,text[j]);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[])
{
        char string[100];
        fgets(string, 100, stdin);
        string[strlen(string)-1] = 0;

        // create an array of pointers
        char **string_array = (char**)malloc(sizeof(char*));

        int i = 0, array_size;

        // tokenize input
        char *token = strtok(string, " ");
        while(token!=NULL) {
                // dynamically increase the array during run time
                string_array = (char**)realloc(string_array, (i+1)*sizeof(char**));
                // create the string as you would do when there is only one string
                string_array[i] = (char*)malloc(strlen(token)+1);
                strcpy(string_array[i], token);
                token = strtok(NULL, " ");
                i++;
        }
        array_size = i;

        for(i=0; i<array_size; i++) {
               printf("%s\n", string_array[i]);
        }

        return 0;
}

基本上,您创建了一个指针数组,并像只有一个字符串时那样为字符串一个一个地分配内存。 (如果令牌数量未知,使用 realloc 来增加指向指针的指针的大小。)

#include <stdio.h>
#include <ctype.h>

int main(void){
    char line[300] = "hello world bye bye\n";
    char temptext[100][15]={0};
    int i=0, j, k=0;

    while(line[k]){
        if(isspace(line[k])){
            ++k;//skip space to word
            continue;
        }
        for(j=0; j < 15-1 && line[k] && !isspace(line[k]); ++k, ++j)
            temptext[i][j] = line[k];
        if(j && ++i == 100)
            break;
    }
    for(j=0; j<i; ++j)
        puts(temptext[j]);
    return 0;
}
#include<stdio.h>
#define NEWLINE printf("\n")
int main(void)
{
        char string[]="hello world bye bye";
        int index=0;
        while(string[index])
        {
                if(string[index]==32)
                {
                        NEWLINE;
                        index++;
                }
                else
                {
                        printf("%c",string[index]);
                        index++;
                }
        }
        NEWLINE;
}

// Whenever i encountered with a space, i am printing a new line on the screen. Here 32       is the ASCII value for space