在单词之间拆分字符串并插入换行符
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 bye
的char
数组,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
我有一个由几句话组成的字符串。 例如:
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 bye
的char
数组,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