我的计划旨在将单词中的每个单词打印在一个单独的行上。但我应该用%s而不是%c 打印它!我已经尝试实现它,但该程序没有给我一个正确的输出!我的想法是当你找到空字符 1-打印单词 2-将temp数组的索引返回0并存储一个新单词
int main () {
char sen[100];
char cpy [100];
printf("Entter a sentence ");
gets(sen);
int len = strlen(sen);
int i = 0;
int k =0;
for (i=0 ; i<len;i++)
{
if (sen[i]!='\0')
{
cpy[k++]+=sen[i];
}
else{
printf("%s\n",cpy);
k=0;}
}
}
答案 0 :(得分:2)
你混淆了空字符和空格字符。空字符\0
代表“字符串结尾”:strlen函数返回第一个\0
之前的字符数。
在您的forloop中,您希望显示由分隔的每个单词,因此您必须使用字符
而不是
\0
进行测试。
另外,要正确显示字符串,您必须使用\0
字符结束字符串。因此,在printf
指令之前,您必须cpy[k] = '\0';
。
答案 1 :(得分:0)
if (sen[i]!='\0')
将永远是真实的,你需要if (sen[i]!= ' ')
代替if (sen[i]!='\0')
,因为单词之间有空格来分隔它们。
同样在cpy[k++]+=sen[i];
您要将sen[i]
添加到cpy[k++]
哪个接缝很奇怪,我认为您需要的是cpy[k++] = sen[i];
修改你的循环如下......
for (i=0 ; i<len; i++) {
int flag = 0;
while(sen[i] == ' ') i++; // multiple spaces
while(sen[i] != ' ' && sen[i] != '\0') {
cpy[k++] = sen[i];
flag = 1;
i++;
}
if(flag) {
cpy[k] = '\0';
printf("%s\n",cpy);
k=0;
}
}
答案 2 :(得分:0)
你不必费心去复制 - 你需要做的就是用新线代替空格。所以这是执行此操作的代码:
#include <stdio.h>
int main()
{
char sen[100];
bool last_char_space = true;
printf("Please enter a sentence: ");
fflush(stdout);
fgets(sen, 100, stdin);;
for (int loop = 0; sen[loop]; ++loop) { // send[loop] is true until end of string - saves repeatedly calling strlen
if (send[loop] == ' ') { // A space
if (last_char_space) { // Last character not a space, put new line
fputc('\n', stdout);
}
last_char_space = true; // Record the fact that we are between words
} else {
fputc(sen[loop], stdout); // Not a space - print it
last_char_space = false; // We are working on a word
}
}
return 0;
}