C 有人能帮我处理这个代码吗?
我认为我的逻辑是正确的,但它没有打印任何东西。代码是从字符串中删除元音,然后显示它C 有人能帮我处理这个代码吗?,c,pointers,C,Pointers,我认为我的逻辑是正确的,但它没有打印任何东西。代码是从字符串中删除元音,然后显示它 #include<stdio.h> #include<conio.h> void main() { char *str="shivank"; int i,len; char *q; clrscr(); len=strlen(str); for(i=0;i<=len;i++) { if((*st
#include<stdio.h>
#include<conio.h>
void main()
{
char *str="shivank";
int i,len;
char *q;
clrscr();
len=strlen(str);
for(i=0;i<=len;i++)
{
if((*str=='a')||(*str=='e')||(*str=='i')||(*str=='o')||(*str=='u'))
str++;
else if(*str=='\0')
break;
else
{
*q=*str;
str++;
q++;
}
}
*q='\0';
puts(q);
getch();
}
#包括
#包括
void main()
{
char*str=“shivank”;
int i,len;
char*q;
clrsc();
len=strlen(str);
对于(i=0;i试试这个
else
{
*q=*str;
puts(q);
str++;
q++;
}
}
*q='\0';
如果我理解正确,您希望将“shivank”
转换为“shvnk”
,并将其存储在单独的字符串中,以便以后打印
你必须把这个内存分配到某个地方。仅仅使用指针是不行的-最好的情况下,你可以将str
更改为指向字符串的另一个开头:“hivank”
,“ivank”
,“vank”
等等。这些都可以只使用指针算法得到,但仅此而已
我建议您使用char
数组,而不是使用字符串常量:
char str[] = "shivank";
char modified_str[10]; // enough memory to store the modified string
使用数组的优点是,您可以像下面的示例那样修改它们:
modified_str[0] = str[0];
(这只是一个将str
的第一个字母复制到modified_str
的第一个字母的示例。)
然后你可以一个接一个地读你的str
字符串的字符,只把非元音字母复制到modified\u str
。别忘了用“\0”结束你的modified\u str
。请阅读页面上有提出有效问题的提示。你需要分配q,使它指向一些内存。void main()
错误,main
应返回int
,clrsc()
和getch()
不是C语言的一部分。C没有在访问时自动增大大小的神奇字符串,因此q
不是其中之一。始终为编译器启用最高级别的警告,并将其视为错误。q
从未被分配/初始化。因此*q
正在尝试取消引用n未知值。q
需要赋值。为什么这样更好?因为它在您检查字符串时打印q。您的原始代码只打印q一次,而您编写代码的方式是,您需要在检查字符串时打印q。尝试一下。我相信它会起作用。q
从未被赋值/初始化。*q
是UB.put(q);
已经太晚了,无法提供任何帮助。除非q
有一个有效值,put(q);
本身也是UB。是的,我得到了它puts(q)将从“/0”打印。这就是它不打印任何内容的原因。应该有另一个指针指向q的开头。