我正在从隐藏的html输入字段中检索一个对象数组.我得到的字符串是:
"{"id":"1234","name":"john smith","email":"jsmith@blah.com"},{"id":"4431","name":"marry doe","email":"mdoe@blah.com"}"
Run Code Online (Sandbox Code Playgroud)
现在我需要再次将其作为一个对象数组传递.如何将此字符串转换为对象数组?
我已经使用antlr 3天了。我可以解析表达式、编写侦听器、解释解析树...这是梦想成真。
但后来我尝试匹配文字字符串“foo%”,但失败了。我可以找到很多声称可以做到这一点的例子。我都试过了。
所以我创建了一个小项目来匹配文字字符串。我一定是在做一些愚蠢的事情。
grammar Test;
clause
: stringLiteral EOF
;
fragment ESCAPED_QUOTE : '\\\'';
stringLiteral : '\'' ( ESCAPED_QUOTE | ~('\n'|'\r') ) + '\'';
Run Code Online (Sandbox Code Playgroud)
简单测试:
public class Test {
@org.junit.Test
public void test() {
String input = "'foo%'";
TestLexer lexer = new TestLexer(new ANTLRInputStream(input));
CommonTokenStream tokens = new CommonTokenStream(lexer);
TestParser parser = new TestParser(tokens);
ParseTree clause = parser.clause();
System.out.println(clause.toStringTree(parser));
ParseTreeWalker walker = new ParseTreeWalker();
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
Running com.example.Test
line 1:1 token recognition error at: 'f'
line 1:2 token …
Run Code Online (Sandbox Code Playgroud) 在 google apps 脚本中寻找一些类似于 ES6 javascript 的东西。
Ss.main.getRange('C2').setValue('${Ss.main.getRange(2,2).getDisplayValue()}')
Run Code Online (Sandbox Code Playgroud)
预期 C2 单元格等于 B2 中的值。相反我得到${Ss.main.getRange(2,2).getDisplayValue()}
我想通过使用两个字符指针来打印“Hello - World”,但我有一个“分段错误(核心转储)”问题。
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define Hyphen " - "
int main()
{
char* x="Hello";
char* y="'World'";
strcat(x, Hyphen);
strcat(x, y);
printf("%s",x);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我一直在阅读各种来源,字符串文字在程序的整个生命周期中都保留在内存中。在那种情况下,这两个函数之间有什么区别
char *f1() { return "hello"; }
char *f2() {
char str[] = "hello";
return str;
}
Run Code Online (Sandbox Code Playgroud)
虽然f1
编译正常,但f2
抱怨我正在返回堆栈分配的数据。这里会发生什么?
str
指向实际的字符串文字(具有静态持续时间),为什么会出现错误?str
,那么原始字符串文字去哪里了?它是否保留在内存中而不引用它?我知道我们可以Omit<>
在没有特定道具的情况下输入某个对象。我希望我们也可以将它用于字符串文字:
type possibleStrings = 'A' | 'B' | 'C'
type AorB = Omit<possibleStrings, 'C'>
Run Code Online (Sandbox Code Playgroud)
但是当尝试在函数中为其参数使用类似的东西时,我收到此错误:
类型“Pick”不能用作索引类型。
我有一个相对简单的用例:我想将一个特征关联到一个类,该类将返回一些用户定义的字符串,即一些用户定义的注册 ID。由于这个注册应该在编译时定义,我希望它是 constexpr,所以我写了如下内容:
template <typename T>
struct ClassRegistration
{
static constexpr std::string_view
Name();
};
template <>
struct ClassRegistration<int>
{
static constexpr std::string_view
Name()
{
return std::string_view{ "int" };
}
};
Run Code Online (Sandbox Code Playgroud)
一切正常,但由于 string_view 实际上并不拥有它的缓冲区,我想知道它是否保证安全,我不只是指一个悬空指针。从我读到的字符串文字保证具有与程序本身一样长的生命周期(从这个函数返回的字符串文字的SO Lifetime)。
因此,string_view 的这种用法是否安全合适?
根据我的C++17(草案)版本(16.5.8 [over.literal]) 以及cppreference.com,C++17应该支持用户定义的字符串文字的模板化运算符。
具体来说:
template <char...>
double operator "" _pi() {
return 0.;
}
int main() {
"test"_pi;
}
Run Code Online (Sandbox Code Playgroud)
然而,gcc 和 clang 都对我大喊大叫:
// gcc -Wall -Wextra -pedantic -std=c++17
error: no matching function for call to 'operator""_pi<char, 't', 'e', 's', 't'>()'
7 | "test"_pi;
| ^~~~~~~~~
note: candidate: 'template<char ...<anonymous> > double operator""_pi()'
2 | double operator "" _pi() {
// clang -Wall -Wextra -pedantic -std=c++17
error: no matching literal operator for call to …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用我找到的 Shutil 脚本,但它收到了SyntaxError: unterminated string literal (detected at line 4)
. 任何有关修复此脚本或新脚本的帮助将不胜感激
import shutil
import os
source = r"C:\Users\[username]\Downloads\"
dest1 = r" C:\Users\[username]\Desktop\Reports\14"
dest2 = r" C:\Users\[username]\Desktop\Reports\52"
dest3 = r" C:\Users\[username]\Desktop\Reports\59"
files = os.listdir(source)
for f in files:
if (f.startswith("Log 14")):
shutil.move(f, dest1)
elif (f.startswith("Log 54")):
shutil.move(f, dest2)
Run Code Online (Sandbox Code Playgroud) 我有一个用 C++17 编写的代码库,它大量使用 UTF-8,以及u8
c++11 中引入的字符串文字来指示 UTF 编码。然而,c++20 将C++ 中u8
文字的含义从生成 a char
or更改const char*
为 a char8_t
or const char8_t*
;后者不能隐式指针转换为const char*
.
我希望这个项目能够支持在 C++17 和 C++20 模式下运行而不会出现中断;可以采取什么措施来支持这一点?
目前,该项目使用的char8
别名使用文字的类型结果u8
:
// Produces 'char8_t' in C++20, 'char' in anything earlier
using char8 = decltype(u8' ');
Run Code Online (Sandbox Code Playgroud)
但这种方法存在一些问题:
char
不保证是无符号的,这使得从数值生成代码点不可移植(例如,char8{129}
用 中断char
,但不能用 中断char8_t
)。
char8
char
与C++17 中没有区别,后者可能会破坏现有代码,并可能导致错误。
从第 2 点继续,不可能在 C++17 中重载char …
string-literals ×10
c++ ×3
c++17 ×3
arrays ×2
c ×2
javascript ×2
antlr4 ×1
c++20 ×1
clang++ ×1
constexpr ×1
g++ ×1
literals ×1
pointers ×1
python ×1
strcat ×1
string-view ×1
syntax ×1
typescript ×1
utf-8 ×1