如何查看字符串

时间:2016-05-18 03:11:59

标签: c++ string backslash

对于我正在制作的函数,我将字符串作为参数并使用它来执行操作。但是,如果前面有反斜杠,我会特别处理字符串中的字符。但是,即使看到黑色的声音,我也遇到了问题!

std::string s = "01234\6";
std::cout << s << std::endl;
std::cout << s.at(5) << std::endl;
if(s.at(5)== '\\')
    std::cout << "It's a backslash" << std::endl;
else
    std::cout << "It's not a backslash" << std::endl;

输出

01234

It's not a backslash

如果mystring.at(i)=='\\',如果它根本没有出现,我该怎么检查?

输入将来自另一个文件(我无法修改),如

myfunc("% \%  %");

如果我读取字符串,我会计算3'%'个字符(因此反斜杠不会忽略它),0'\'字符

编辑:编码我的计算方式

char percent = '%';
int current_index = 0;
int percent_count = 0;

int ret = str.find(percent, current_index);
while(ret != std::string::npos)
{
  percent_count++;
  current_index = ret +1;
  ret = str.find(percent, current_index);
 }

 return percent_count;

4 个答案:

答案 0 :(得分:3)

C ++支持三种转义序列:

  1. 简单转义序列。它是以下之一:

     Exception in thread "main" java.lang.NoClassDefFoundError: com/mongodb/hadoop/util/MongoConfigUtil
        at WordCount.main(WordCount.java:58)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
    Caused by: java.lang.ClassNotFoundException: com.mongodb.hadoop.util.MongoConfigUtil
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 7 more
    
  2. 八进制转义序列。它是以下之一:

    \’ \" \? \\
    \a \b \f \n \r \t \v
    

    \ octal-digit \ octal-digit octal-digit \ octal-digit octal-digit octal-digit 是最着名的八进制转义序列,表示空字符。

  3. 十六进制转义序列。它是以下之一:

    \0
  4. 使用时:

    \x hexadecimal-digit
    hexadecimal-escape-sequence hexadecimal-digit
    

    std::string s = "01234\6"; 部分表示八进制转义序列。它不代表两个字符。

    相同
    \6

    其中std::string s = "01234?"; 是由八进制数?表示的字符。

    为了让6作为字符串的元素,您需要使用:

    \

答案 1 :(得分:0)

检查方法是正确的,但\转义6,因此\6计算一次,您可以检查sizeof("12345\6"),其中7或strlen("12345\6") ,这是6。

"12345\6"更改为"12345\\6"

答案 2 :(得分:0)

如果你在字符串中有反斜杠,那么<option value="$row[emp_id]">$row[emp_name]</option> 编译器就已经特别对它进行了处理:

C++

除非你的意思是你想要一个带有反斜杠的文本(例如,来自I / O)。在这种情况下,您应该放置std::string s = "01234\6"; //\6 is treated differently already, as unicode character \6, not as backslash + 6 以使您的编译器理解您将其视为真正的反斜杠而不是unicode字符:

\\

然后你可以测试你的程序。

答案 3 :(得分:0)

没有编译器C ++会将PATH解释为反斜杠,因为它是escape character。您必须使用\来表示字符串中的反斜杠。