[英]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.