我还是c ++(以及stackoverflow)的新手。 我正在创建程序来为我分析一些数据(打开文件,将数据保存到向量中,然后我搜索向量的名称,然后我使用对象函数)。无论如何,以前"版本"该程序工作正常,但我打开的文件在开头只包含每行1个字符串(后跟其他数据),因此很容易使用。
我试图做的是打开包含1-3个字符串的文件(即第1行 - 西汉姆联队,第2行 - 埃弗顿等)。在名称之后,其他数据在同一行上。
我考虑过将名称和其他数据分成2行,例如Line1 - name,Line2 - 其他数据,依此类推。但是如何保存整个"名称"线到矢量(矢量是对象类型)。其他选项是打开文件并将所有字符保存到数组中。之后我会在Outfile中输出该数组,只删除字母之间的空格(即 - WestHamUnited),然后我将使用输出文件。
问题是,如何删除字母之间的空格? 也许你们可以推荐一些我不知道的其他选项。
答案 0 :(得分:0)
"Question is, how do I delete the spaces only between letters?"
You are aware of std::string, aren't you? Then you should be able to locate a method that deletes a character or character range from the string.
Good. Than the only problem would be how to detect if a character is a space. How hard could it be, I wonder.
I short: RTFM, Luke, use it with full confidence.
答案 1 :(得分:0)
假设有<head runat="server">
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.3/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
$(".bc_likes").click(function () {
var id = $(this).data('id');
$.ajax({
url: 'RepeaterExample.aspx/ServerCall',
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ id: id }),
method: 'POST',
success: function (data) {
alert(data.d);
}, error: function (err) {
console.log(err);
}
});
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<ul>
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<li>
<div id="divproblem" class="bc_likes gallery_likes_add" data-id='<%# Eval("ID") %>' style="border:1px solid red;">
<i class="stand_icon icon-heart"></i>
<span><%# Eval("ProductName") %></span>
</div>
</li>
</ItemTemplate>
<SeparatorTemplate>
<hr />
</SeparatorTemplate>
</asp:Repeater>
</ul>
</form>
</body>
对象存储的文本行(string
可以通过s
从文件/流中读取)
getline
我们需要在第一个数字之前读取所有文本到其他 std::string s = "Manchester City 17 26 2.16";
(加入一些没有空格的单词)
string
我们不知道在第一个数字在字符串中之前会有多少非数字(名称的一部分),但我们希望这个数字是。
如果您的任务类似,请考虑以下示例:
std::string name = ""; // empty string to store name
<强>更新强>
实际上我们可以使用 std::istringstream ss(s); // creation of stream object to read data from text line
double d = 0; // will be the first number
std::string str; // buffer string for parts of name
bool notNumber;
// loop that works to update name trying to find a number
do{
ss >> d; // try to read number
notNumber = ss.fail(); // save the state (if number was read value is false)
if (notNumber) // is value is true (not a number is the first in the stream)
{
ss.clear(); // reset the state
ss >> str; // read a word
name.append(str); // add this word to the name
}
} while (notNumber && !ss.eof()); // while non-numbers are read and stream is not empty
// after loop we have name and, perhaps, number
std::cout << "Name is: " << name << std::endl;
std::cout << "The first number is: " << d << std::endl;
知道该数字确实存在于初始字符串notNumber
s
更新2:
包含
的文件if (notNumber)
std::cout << "There is no number after name!" << std::endl;
else
std::cout << "The first number is: " << d << std::endl;
西汉姆联队3.14 22
埃弗顿17 26 2.16
曼彻斯特城9.32 17 26
以下计划
test.txt
提供以下输出:
答案 2 :(得分:0)
如果您可以控制输入文件格式,我建议您为第一列引入一些分隔符标记。
否则,如果列数固定,则可以反向读取行。例如。最新的3个单词是数字,其余的都是团队的名字。
请注意,在第一个数字之前读取单词是错误的,因为存在名称中包含数字的团队(例如FC Schalke 04)。
以下是一个例子:
struct FileLine
{
std::string col1;
double col2 = 0., col3 = 0., col4 = 0.;
// `words` is a vector of words from a line in file
bool load(const std::vector<std::string>& words)
{
col1.clear();
col2 = col3 = col4 = 0.;
std::vector<std::string>::size_type n = words.size();
if (n >= 4) {
col4 = std::stod(words.at(n-1));
col3 = std::stod(words.at(n-2));
col2 = std::stod(words.at(n-3));
col1 = std::accumulate(words.begin(), words.end()-3, col1);
}
return n >= 4;
}
};
另一种方法是使用正则表达式(link)。它是用于文本解析的非常强大的工具。