我知道这个问题曾经多次被问过,但我不是要求解决方案本身,而是要知道为什么我的解决方案不起作用。
这是我的解决方案:
WITH
Function Test (p_value in varchar2) return sys_refcursor
IS
ret_cur sys_refcursor;
BEGIN
Open ret_cur for select colA from tableA where colB = p_value;
return ret_cur;
END ;
SELECT Test ('ABC') ---passing Input to function
FROM DUAL;
该程序只为每个输入打印空白("")
在使用调试器运行时,我看到void delete_blanks(char *string)
{
while (*string)
{
if (*string == ' ')
*string = '\0';
*string++;
}
puts(string);
}
指向' \ 0'在末尾。是否可以“就地”"?
这是此处找到的原始解决方案:
*string
答案 0 :(得分:1)
这是一个很好的就地实施
int main(void) {
char inStr[] = "a cat is on the moon";
int end = 0;
for (int i = 0; i < strlen(inStr); i++) {
if (inStr[i] != ' ') {
if (i != end) {
inStr[end] = inStr[i];
}
end++;
}
}
inStr[end] = '\0';
printf("%s\n", inStr);
}
答案 1 :(得分:0)
可能是因为您正在修改源,传递给该函数的参数,当它查找空格时,将源快捷方式设置为&#39; \ 0&#39;,因此您不会打印正确的结果。尝试使用其他指针,例如你给出的例子。
答案 2 :(得分:0)
char a[]="it is a sunny morning";
int j=0;
for( int i=0;i<strlen(a);i++){
if(a[i]!=' '){
a[j]=a[i];
j++;
}
}
for(int i=j;i<strlen(a);i++){
a[i]='\0';
}
printf("%s",a);
首先将没有空格的字母分组,然后删除超出空格的字母。
输出 itisasunnymorning
答案 3 :(得分:0)
不清楚你的意思是什么&#34;删除空白&#34;。如果你想要的只是打印没有空格的字符串,你可以减少你的功能:
void delete_blanks(char *string)
{
while (*string)
{
if (*string != ' ')
putchar(*string);
string++;
}
putchar('\n');
}
如果你想删除底层字符串中的空格,它会变得有点复杂,因为你必须在&#39;之后移动字符。 &#39;填补空白。没有空字符&#39;您可以插入以填充字符串中的孔,您必须移动剩余的字符以填充它。
基本上你的功能有两个主要的问题。您正在用字符串终止字符替换空格,表示字符串在此处结束。这不是你想要做的,因为空格后面可能有字符。事实上,如果您只想打印字符串,则根本不应该修改它。
当您完成对字符串的迭代时,字符串指向字符串的结尾。基本上将空字符串传递给puts()
。您需要在将大量++之前的原始值传递给puts()
当你真的要做字符串++时,你也在做*string++
。这实际上有效,因为它被解析为*(string++)
,但可读性很差。
答案 4 :(得分:0)
如果要删除字符串单词之间的空格,
直接答案如下:
// #include <ctype.h>
void RemoveSpaces(char *str) {
char *strBuff = (char*) malloc(strlen(str) + 1), *p = strBuff;
while (*str) {
if (!isspace(*str)) {
*p = *str;
p++;
}
str++;
}
*p = '\0';
printf("%s\n", strBuff);
free(strBuff);
}
int main(){
RemoveSpaces("Thank you for help");
}
结果:
此外,还有另一种方法,并给出相同的结果如下:
void RemoveSpaces(char *str) {
while (*str) {
if (!isspace(*str)) {
putchar(*str);
}
str++;
}
printf("%s\n", str);
}