C 程序返回一些奇怪且不完整的字符串
我试图编写一个函数,从字符串中删除空格,但输出结果根本不合理。我需要帮助,法姆 代码:C 程序返回一些奇怪且不完整的字符串,c,arrays,string,algorithm,C,Arrays,String,Algorithm,我试图编写一个函数,从字符串中删除空格,但输出结果根本不合理。我需要帮助,法姆 代码: char*deleteSpace(char*String,int-n){ int i; 字符*没有空格; withoutSpaces=calloc(n,sizeof(char)); 对于(i=0;i
char*deleteSpace(char*String,int-n){
int i;
字符*没有空格;
withoutSpaces=calloc(n,sizeof(char));
对于(i=0;i
您需要为源字符串的“读取”索引和目标字符串的“写入”索引编制索引
另外,为了更好的可调试性和可读性,将索引增量,++i
放在单独的一行上。哦-看起来你在两次递增i
。一次通过循环隐式执行,另一次使用++i
还不清楚n是否表示带或不带null终止符的字符串长度。让我们让函数通过strlen解决这个问题
不要忘记使用null终止输出字符串
还有其他几个bug。这是一个改进的版本:
char* deleteSpace(const char *String) {
int j = 0;
const char* ptr = String;
size_t n = 0;
size_t spaces = 0;
char* withoutSpaces = NULL;
// count how many characters we expect to copy over
while (*ptr) {
n += (*ptr == ' ') ? 0 : 1;
ptr++;
}
withoutSpaces = (char*)malloc(n+1); // +1 for null char
for (i = 0; i < n; i++) {
if (String[i] != ' ') {
withoutSpaces[j] = String[i];
j++;
}
}
withoutSpaces[j] = '\0';
return withoutSpaces;
}
对不带空格的
和字符串使用两个单独的计数器。当你++i
没有空格的的索引跳过一个单元格。为了进一步,你可以realloc
结尾的没有空格的字符串为没有空格的=realloc(没有空格,j+1)
。并确保在返回时释放此内存。@RahulBharadwaj-似乎OP想要返回一个新字符串。因此,由调用方释放字符串。我将添加一个符合您建议的紧凑版本。正确,免费
取决于OP.@RahulBharadwaj-通过您建议的变体进行修复。
void deleteSpace(char *String) {
char* ptrWrite = String;
while (*String) {
if (*String != ' ') {
*ptrWrite = *String;
ptrWrite++;
}
String++;
}
*ptrWrite = '\0';
}