【发布时间】:2019-08-26 18:12:27
【问题描述】:
任务是从字符串中每隔一个单词输出一次
我做了一个循环来检查字符串中的每个字符,当它到达一个空格时,布尔值会将它的值更改为相反的值,所以在它到达下一个空格之前,它会将字符从第一个字符串复制到第二个
int main(void)
{
char str1[max]="Hellow my name is Tom why not today";
char str2[max];
int i;
bool a=false;
for (i=0;i<strlen(str1);i++)
{
if ((int)str1[i]==32)
{
a=!a;
}
if (a==true)
{
str2[i]=str1[i];
}
}
printf ("%s\n",str2);
return 0;
}
终端显示:`\365\277\357\376 my\365\277\357\376 isu
【问题讨论】:
-
您不会初始化所有目标数组
str2,也不会将其作为字符串终止。 -
这段代码有很多问题。它不初始化目标,它为
str1中的每个字符调用strlen,导致 O(n**2) 时间复杂度,它不会终止目标字符串,并且它使用不自然的构造,如if (a == true)而不仅仅是if (a)。错误的代码。 -
您不必指定初始化数组的大小。 char a[] = "aaa" 是完全正确的。您也可以使用 ' ' 字符常量而不是 32
-
由于
' '或32是 int,因此您不需要转换(int)进行比较 -
@TomKarzes 为 (i=0;str1[i]!='\0';i++) 更改此循环是否更好?另外,请您解释一下如何终止目标字符串。