我想创建一个程序来删除字符串中字符之间的空格。
这是我的代码:
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
int main(){
char str[10]="I love you",temp[20];
int i,j;
for(i=0;str[i];i++){
if(str[i] ==" "){
}
else{
temp[j]=str[i];
j++;
}
}
temp[j]='\0';
strcpy(str,temp);
printf("%s",str);
}
最佳答案
您的程序有几个问题。
尽管此字符数组的初始化在C中有效
char str[10]="I love you",temp[20];
^^^^
但是,数组
str
将不包含字符串文字"I love you"
的结尾零,因为字符串文字包含11个字符,包括结尾的零。这给阵列的处理带来一些困难。最好像这样声明数组
char str[11]="I love you",temp[20];
^^^^
或喜欢
char str[]="I love you",temp[20];
^^^^
在这种情况下,数组将包含终止零。
在此声明中
if(str[i] ==" ") {
^^^^
将字符与指针进行比较,因为字符串文字
" "
被隐式转换为指向其第一个字符的指针。我认为您的意思是字符常量而不是字符串文字
if(str[i] == ' ') {
^^^^
考虑到变量
j
尚未初始化。因此,该程序具有未定义的行为。至少你应该写int i,j = 0;
^^^^^
并且可以在不使用辅助数组的情况下编写程序。
例如,它可以通过以下方式查看
#include <stdio.h>
int main( void )
{
char str[] = "I love you";
size_t i = 0;
while ( str[i] && str[i] != ' ' ) i++;
size_t j = i;
while ( str[i] )
{
if ( str[++i] != ' ' ) str[j++] = str[i];
}
puts( str );
}
它的输出是
Iloveyou