問題的開始:
在編譯原理的詞法分析器中,進行字符串相加時出現了報錯的情況,代碼和報錯如下:
//str是字符型指針
string pstr=*(str+i)+*(str+(i+1));
報錯提示為:
C:\Users\zwx\Desktop\test.cpp|130|error: conversion from 'int' to non-scalar type 'std::__cxx11::string {aka std::__cxx11::basic_string
正常情況下,我們習慣於使用string重載的+運算來實現字符串的拼接或者是字符串和字符之間的拼接,但是,我們要注意,在c/c++中編譯器會存在把單個的字符識別為int類型的值,所以在上段代碼中編譯器會把第二個字符識別為int,相當於是把int轉成string了,當然,解決辦法也簡單,最基本的就是讓編譯器知道我這個是個字符或者單個字符的字符串就好了,但是如果你的思路如下
//str是字符型指針
string pstr=(""+*(str+i))+(""+*(str+(i+1)));
也會出現錯誤,報錯提示為:
C:\Users\zwx\Desktop\test.cpp|130|error: invalid operands of types 'const char' and 'const char' to binary 'operator+'|
這當然是因為重載的+不適用於const char* "" 和單個字符相加咯。
解決方法:
1.通過單個加,告訴編譯器,加上的是字符而不是int
string test="";
test+=('a');
test+=('b');