簡體   English   中英

在C中將“字符串”拆分為字符

[英]Splitting “String” into characters in C

我正在學習C語言的初學者課程,並嘗試將自己的頭纏在“弦”上。 我以前用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()函數在讀取文件時解決了這個問題。 但是,我似乎無法對current-> data中的文本執行此操作。

    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 *緩沖區(字符串)中的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') {
       ...
    }
}
void print_list(node_line head) {

應該

void print_list(node_line *head) {

GETC:

返回指定流的內部文件位置指示符當前指向的字符。

那不是您想要的,使用指針算法:

char *s = current->data;

while (*s) {
    if(*s=='a' || *s=='e' || *s=='i' || *s=='o' || *s=='u' || *s=='y') {
        printf("");  //Remove the vowel
    }
    else {
        putchar(*s); //Write out one character at the time.   
    }
    s++;
}

或更好:

char *s = current->data;

while (*s) {
    if(*s!='a' && *s!='e' && *s!='i' && *s!='o' && *s!='u' && *s!='y') {
        putchar(*s); //Write out one character at the time.   
    }
    s++;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM