簡體   English   中英

解析字符串並將其分配給其他字符

[英]Parse a string and assign it to different char

我想將字符串解析為音符和八度。 例如,如果用戶輸入“ A#4”,則將(A#)音符存儲在(char n)中,而(4)八度音符將存儲在(char o)中。 為什么在A#之后輸出空白行而不是4?

#include <cs50.h>
#include <stdio.h>
#include <string.h>

int main()
{
    string src = get_string();
    char *n;
    char *o;
    char *note = "ABCDEFG#b";
    char *octave = "12345678";

    o = strtok(src, note);
    n = strtok(src, octave);

    printf("%s\n", n);
    printf("%s\n", o);
}

輸出:

A#

您能否指出錯誤並提出解決方案?

strtok不是您要在此實例中使用的功能。

調用它時,它會更改字符串,並用NUL替換與分隔符匹配的字符,因此您會丟失要查找的字符作為音符。 第二次使用src調用該字符串時,該字符串將顯示為空,並且不會找到任何內容-您打算在以后的時間使用第一個參數設置為NULL來調用它,以便它知道您正在搜索下一個令牌在同一字符串中。

您可能要使用strspn來計算與您的集合(即note )匹配的字符數,或者使用strpbrk來找到strpbrk匹配的第一個字符。

或者,您可以自己遍歷字符串並像這樣使用strchr

char *pos;

for(pos=src;*pos!='\0';pos++)
  {
  if(strchr(note,*pos))
    {
    // *pos is a note character
    }
  }

無論使用什么方法,都需要根據結果構建一個新的字符串,因為原始字符串沒有空間將NUL終結符放到里面來分離出您要查找的兩個部分。

暫無
暫無

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

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