簡體   English   中英

strsep()函數-分隔符中有更多字符

[英]strsep() function - more characters in delimiter

我在使用C中的strsep()函數時遇到問題。我想將字符串分成兩部分。 該字符串以ARTIST - TITLE格式包含有關當前播放歌曲的信息,因此藝術家和標題之間用一個空格,一個破折號和一個空格分隔。 我想用“-”將其分開。 “-”將不起作用,因為某些藝術家的名字帶有破折號。

當我用“ Michel Telo-Ai Se Eu Te Pego”嘗試此代碼時:

// String is in tmp
while ((token = strsep(&tmp, " - ")) != NULL)
{
    printf("%s\n", token);
}

我得到這個:

[root@runeaudio ~]# ./board
Michel
Telo


Ai
Se
Eu
Te
Pego

代替這個:

[root@runeaudio ~]# ./board
Michel Telo
Ai Se Eu Te Pego

似乎strsep()將分隔符分為3個字符:“”,“-”,“”,並在它們之間使用OR,但我希望它按原樣查找“-”。 任何想法如何解決這個問題?

下面的代碼演示了如何分割字符串,因為它除了打印令牌外對令牌沒有任何作用,所以它不是很有用,但是您可以看到令牌的工作方式並實現滿足您需要的版本。

char string[] = "Michel Telo - Ai Se Eu Te Pego";
char *separator = strstr(string, " - ");
if (separator != NULL)
 {
     separator[0] = '\0';
     printf("%s\n", string);

     separator[0] = ' ';
     printf("%s\n", separator + 3);
 }

當然,您可以使用strdup()或類似的函數來創建帶有“ 令牌 ”內容的新字符串。

這當然不是很可靠,因為沒有任何東西可以確保不會有歌手的名字帶有" - " ,但是,如果它是歌曲名稱,那還不錯。

這是一個有效的版本,如果您的平台上沒有strdup() ,那么肯定會有一個不同名稱的實現。

#include <string.h>

void extractArtistAndTitle(char *string, char **artist, char **title)
 {
    char *separator;

    if ((string == NULL) || (artist == NULL) || (title == NULL))
        return;
    separator = strstr(string, " - ");
    if (separator != NULL)
     {
        size_t length;

        length  = separator - string;
        *artist = malloc(1 + length);
        if (*artist != NULL)
        {
            memcpy(*artist, string, length);
           (*artist)[length] = '\0';
        }
        *title = strdup(separator + 3);
     }
 }

int main()
{
    char string[] = "Michel Telo - Ai Se Eu Te Pego";
    char *artist;
    char *title;

    extractArtistAndTitle(string, &artist, &title);
    if (artist != NULL)
        printf("Artist: %s\n", artist);
    if (title != NULL)
        printf("Title : %s\n", title);
    free(artist);
    free(title);

    return 0;
}

這是一個代碼,使用該代碼,您只能根據'-'獲得字符串

#include <stdio.h>

int main()
{
    char token[100];
    int i,j=0,flag=0;
    char tmp[]="Michel Telo - Ai Se Eu Te Pego";
    for(i=0;tmp[i]!='\0';i++)
    {
        if((tmp[i]>='a' && tmp[i]<='z') || (tmp[i]>='A' && tmp[i]<='Z') || (tmp[i]==32 && !isalpha(tmp[i+1])))
        {
            flag=0;
            token[j++]=tmp[i];
            continue;
        }
        else if(flag==0 && tmp[i]=='-')
        {
            token[j]='\0';
            j=0;
            flag=1;
            printf("%s\n",token);
        }
    }
    token[j]='\0';
    printf("%s\n",token);
    return 0;
}

暫無
暫無

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

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