繁体   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