作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 C 语言的初学者类(class),并试图了解“字符串”。我以前用Java编程过,所以有点困惑。
我想知道如何将“字符串”拆分为字符,以便能够删除某些字符。我已经为链表编写了代码,每个节点都保存一个数据值,以及一个下一个指针(称为node_line,因为它保存行)。
typedef struct node {
char *data;
struct node *next;
} node_line;
这没有问题,我可以遍历整个列表并打印出每个元素:
void print_list(node_line head) {
node_line * current = head;
while(current != NULL) {
printf("%s\n", current->data);
current = current->next;
}
}
但是,我在将 current->data 中的“字符串”转换为字符时遇到问题。也就是说,一次读取一个字符。
例如,我想编写一个程序来删除“字符串”中的所有元音。我已经使用 getc() 函数在读取文件时成功解决了这个问题。但是,我似乎无法对当前->数据中的文本执行此操作。
int c;
while((c = getc(f)) != EOF) {
//REMOVE
if(c=='a' || c=='e' || c=='i' || c=='o' || c=='u' || c=='y') {
printf(""); //Remove the vowel
}
else {
putchar(c); //Write out one character at the time.
}
}
我想象它是这样的:
while ((c = getc(current->data) != NULL) { ... }
非常感谢任何帮助、提示等!
最佳答案
getc
用于读取文件。要访问 char *
缓冲区(字符串)中的字符,您通常会执行以下操作:
for (const char * p = current->data; *p != '\0'; ++p)
{
char c = *p;
if (c=='a' || c=='e' || c=='i' || c=='o' || c=='u' || c=='y') {
...
}
}
或者,如果您更喜欢显式数组索引而不是指针:
const char * s = current->data;
for (int i = 0; i < strlen(s); ++i)
{
char c = s[i];
if (c=='a' || c=='e' || c=='i' || c=='o' || c=='u' || c=='y') {
...
}
}
关于c - 将 "String"拆分为 C 中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25863220/
我是一名优秀的程序员,十分优秀!