我有一个功能,其中我想返回一个字符串(即字符数组),根本没有空格。这是我的代码,在我的理解中是不对的:
char *ignoreSpace( char helpArr[], int length ){
int i = 0; int j = 0;
char withoutSpace[length];
while ( i < length ){
/*if not a space*/
if ( isspace( helpArr[i] ) == FALSE )
withoutSpace[j] = helpArr[i];
i++;
}
return *withoutSpace;
}
我的意图是:
return *withoutSpace;
是否返回数组的内容而没有空间,所以我可以解析一个完全没有空格的字符串。
请告诉我如何才能让它变得更好?
答案 0 :(得分:1)
当函数返回时,您当前的解决方案将丢失withoutSpace
的结果,因为它仅在该函数的范围内定义。
一个更好的模式是接受函数的第三个参数,它是一个指向char[]
的指针,用于将结果写入 - 与标准函数的方式非常相似,(例如strcpy
char* ignoreSpace(char* src, char* dst, int length) {
// copy from src to dst, ignoring spaces
// ...
// ...
return dst;
}
答案 1 :(得分:0)
您永远不会增加j
。如果源字符串的当前字符不是空格,您可能希望将其存储在输出字符串中,然后将j
增加一个;这样你就可以将下一个可能的角色存储到下一个插槽中,而不是一次又一次地覆盖0
个角色。
所以改变这个:
...
withoutSpace[j] = helpArr[i];
...
进入这个:
...
withoutSpace[j++] = helpArr[i];
...
然后还附加withoutSpace
0
或'\0'
(它们是相同的),以便任何字符串处理函数都知道它的结束。还要返回指针,因为你应该这样做,而不是*withoutSpace
或withoutSpace[0]
(它们是相同的):
char *ignoreSpace( char helpArr[], int length ){
int i = 0; int j = 0;
char * withoutSpace = malloc( length * sizeof * withoutSpace ); // <-- changed this
while ( i < length ){
/*if not a space*/
if ( isspace( helpArr[i] ) == FALSE )
withoutSpace[j++] = helpArr[i]; // <-- replaced j with j++
i++;
}
withoutSpace[j] = 0; // <-- added this
return withoutSpace;
}
然后你应该好好去,假设你可以拥有可变长度数组。
编辑:那么,可变长度数组与否,您最好使用malloc
或calloc
或其他东西来使用动态内存分配,因为否则,根据评论,你将返回一个本地指针变量。当然,这需要您最终手动free
分配的内存。
答案 2 :(得分:0)
试试这个(假设以空字符结尾的字符串)
void ignoreSpace(char *str) {
int write_pos = 0, read_pos = 0;
for (; str[read_pos]; ++read_pos) {
if (!isspace(str[read_pos]) {
str[write_pos++] = str[read_pos];
}
}
str[write_pos] = 0;
}
答案 3 :(得分:0)
您无法从函数返回指向局部变量的指针,因为只要您离开该函数,所有局部变量都将被销毁并且不再有效。
你必须
在函数中使用malloc
分配空格并返回指针
到那个分配的记忆
不从函数返回指针而是直接修改 原始字符串。
第一个解决方案:
char *ignoreSpace(char helpArr[], int length)
{
int i=0; int j=0;
char *withoutSpace = malloc(length) ;
while(i <= length)
{
/*if not a space*/
if(isspace(helpArr[i]) == FALSE)
withoutSpace[j++] = helpArr[i];
i++;
}
return withoutSpace;
}
第二个解决方案:
char *ignoreSpace(char helpArr[], int length)
{
int i=0; int j=0;
while(i <= length)
{
/*if not a space*/
if(isspace(helpArr[i]) == FALSE)
helpArr[j++] = helpArr[i];
i++;
}
return helpArr;
}
我的代码中还有一些其他的小修正。找出哪些是留给读者的练习。