STD ::距离为何打印出`` - '
Why does std::distance print out a `-`?
我编写了以下程序,以打印以a=0
,b=1
等开始的字母出现。有人可以指出为什么使用std ::距离打印出空白的-
,以及我如何摆脱它?
// Example program
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
string str;
cin>>str;
int n=str.size();
std::vector<char> table(26);
table = {
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
};
int i=0;
while(i<n) {
char c=str[i];
auto search = std::find(table.begin(), table.end(), c);
if(search!=table.end()) {
int dist = std::distance(search, table.begin());
cout<<dist; //prints out -0-1-2-3 instead of 0123, why?
}
i++;
}
return 0;
}
工作程序在这里
,因为这两个迭代器之间的距离为负;您的顺序错误。"较小"的迭代器应在左侧,而不是右侧。
您有:std::distance(search, table.begin())
您应该有:std::distance(table.begin(), search)
为什么使用std ::距离打印出空白的
-
-
字符是减号。它用于表示负数。因此,-
是因为您打印了负数。距离为负,因为第一个参数比第二个参数。
我怎么能摆脱它?
如果您计算从较早位置到后者的距离,则距离将为正:
std::distance(table.begin(), search);
在这种情况下,您确实知道,但是如果您不知道或不关心该顺序,并且只需要绝对距离,则可以使用函数std::abs
获得它:
std::abs(std::distance(it1, it2));
ps。仅在迭代器随机访问时,首先允许传递后者迭代器。
标准函数std::distance
接受一系列类型的[start, target]
。所以你需要写
auto dist = std::distance( table.begin(), search );
或不使用函数std::distance
您只需写
auto dist = search - table.begin();
因为类模板std::vector
具有随机访问迭代器。
关于该程序的几句话。
最好使用C字符串而不是std::vector
(例如CC_14)并相应地使用标准C函数而不是C 算法时,就是这种情况。
该程序可以看起来以下方式
#include <iostream>
#include <string>
#include <cstring>
#include <cctype>
int main()
{
const char *table = "abcdefghijklmnopqrstuvwxyz";
std::string s;
std::getline( std::cin, s );
for ( char c : s )
{
c = std::tolower( ( unsigned char )c );
if ( const char *p = std::strchr( table, c ) )
{
std::cout << p - table << ' ';
}
}
std::cout << std::endl;
return 0;
}
例如,要输入
Umedh Singh Bundela
然后输出看起来像
20 12 4 3 7 18 8 13 6 7 1 20 13 3 4 11 0
而不是语句中的表达
std::cout << p - table << ' ';
如果需要,您可以使用std::distance
的呼叫
std::cout << std::distance( table, p ) << ' ';
相关文章:
- 如何循环打印顶点结构
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 如何在c++中打印目录
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 在线编译器中的分段C++没有打印消息
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 如何将结构插入到集合中并打印集合的成员
- 在循环C++中指定字符串之后,不会打印该字符串
- 以螺旋方式打印矩阵的程序.(工作不好)
- 从控制台中删除最后打印的元素
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 如何仅使用对象名称打印特定于对象的成员
- 回溯C++不打印函数,因此文件
- 在一定长度后从数组中打印时缺少整数
- 为什么这个 c++ 代码打印出长度 5,当我打印出字符串时,程序会自动终止?
- 在gem5中打印文件中的所有cache_blocks
- STD ::距离为何打印出`` - '
- c++计算输入和保存点的结构与原点之间的距离,根据距离打印出列表