我有一个由几句话组成的字符串。 例如:
hello world bye bye
现在,我需要将这句话变成一句话:
hello
world
bye
bye
我有这个想法,但我不知道如何写得正确,所以我是跳跃ypu家伙可以帮助我。 这就是我到目前为止所做的:
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
}
}
基本上,我的想法是在我的线路的所有长度上运行,当我到达一个空间时,我希望它进入(向下移动一行,使它看起来像一个库仑)
答案 0 :(得分:0)
假设line
是包含char
的{{1}}数组,hello world bye bye
被声明为
text
并且您希望将每个单词复制到char text[100][15]; //I used 100 and 15 because your example contains it
的每一行中。然后,使用带有text
(空格)的strtok()
函数作为分隔符,并将其置于循环中,当" "
返回strtok()
以获取每个单词时,该循环终止。使用循环中的strcpy()
将每个单词复制到NULL
的每一行。
此代码如下所示:
text
现在,要打印它,您可以使用
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]);
请注意,上述代码不会阻止buffer overflows。您可以使用
打印每个单词int len=strlen(line);
int i=0;
int k=0;
for(int j=0;j<len+1;j++)
{
if(line[j]==' ')
{
text[i][k]='\0';
i++;
k=0;
}
else
{
text[i][k]=line[j];
k++;
}
}
答案 1 :(得分:0)
#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增加指针指针的大小。)
答案 2 :(得分:0)
#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;
}
答案 3 :(得分:-1)
#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