有没有一种简单的方法来检查一条线是否为空.所以我想检查它是否包含任何空格,如\ r \n\t和空格.
谢谢
我有一个理论问题:
1)如何将变量传递给getline()系统?
awk 'BEGIN{var="ls"; var | getline var; system("echo $var")}'
Run Code Online (Sandbox Code Playgroud)
2)如何为输出系统("ls")分配变量并在awk中打印结果?
awk 'BEGIN{var="system("ls")"; print '$var'}'
Run Code Online (Sandbox Code Playgroud)
3)你能在系统中分配一个变量(var ="ls")并在awk中打印结果吗?
awk 'BEGIN{system(var="ls"); print "'"$var"'"}'
Run Code Online (Sandbox Code Playgroud)
感谢您的信息.
编辑:
torek:谢谢你的回复.
我理解在第一个例子中,你可以这样做:
awk 'BEGIN { while ("ls -l" | getline var) system("echo " var );}'
Run Code Online (Sandbox Code Playgroud)
对于此应用程序,您不能从system()分配变量输出?如下例所示:
awk 'BEGIN {var="ls -l"; system(var); print var}'
Run Code Online (Sandbox Code Playgroud) 基本上我首先采用整数作为输入然后测试用例.我的每个测试用例都是一个字符串.如果字符串的起始模式匹配"HI A"并且它不区分大小写,我想要打回字符串.我写下面的代码来完成这个.我的问题是,当我在每次输入后按Enter键时,getline将换行符作为新输入.我试图通过在每次输入后使用额外的getline来解决这个问题,但问题仍然存在.程序卡在循环中,即使我已经设置了休息条件.我究竟做错了什么?
#include <iostream>
#include <string>
using namespace std;
int main(){
int N;
cin >>N;
string nl;
getline(cin,nl);
for (int i=0;i<N;i++){
string s;
getline(cin,s);
//cout <<"string"<<s<<endl;
int flag=0;
if ((s.at(0)=='h'||s.at(0)=='H')&&(s.at(1)=='i'||s.at(1)=='I')&&(s.at(2)==' ')&&(s.at(3)=='a'||s.at(3)=='A')) flag=1;
if (flag==1) cout << s;
//cout << "not " <<s;
string ne;
cout << "i="<< i<<endl;
if (i==N-1) {break;}
getline(cin,ne);
}
}
Run Code Online (Sandbox Code Playgroud)
以下是示例输入:
5
Hi Alex how are you doing
hI dave how are you doing
Good by Alex
hidden agenda
Alex greeted Martha by saying Hi Martha …Run Code Online (Sandbox Code Playgroud) 我有以下文本文件结构(文本文件很大,大约100,000行):
A|a1|111|111|111
B|111|111|111|111
A|a2|222|222|222
B|222|222|222|222
B|222|222|222|222
A|a3|333|333|333
B|333|333|333|333
...
Run Code Online (Sandbox Code Playgroud)
我需要提取一段与给定键相关的文本.例如,如果我的密钥是A | a2,我需要将以下内容保存为字符串:
A|a2|222|222|222
B|222|222|222|222
B|222|222|222|222
Run Code Online (Sandbox Code Playgroud)
对于我的C++和Objective C项目,我使用了C++ getline函数,如下所示:
std::ifstream ifs(dataPathStr.c_str());
NSString* searchKey = @"A|a2";
std::string search_string ([searchKey cStringUsingEncoding:NSUTF8StringEncoding]);
// read and discard lines from the stream till we get to a line starting with the search_string
std::string line;
while( getline( ifs, line ) && line.find(search_string) != 0 );
// check if we have found such a line, if not report an error
if( line.find(search_string) != 0 )
{
data = …Run Code Online (Sandbox Code Playgroud) 我是编程新手,我在C++中有一些问题get()和getline()功能.
我对这两个功能的理解:
该getline()函数读取整行,并使用Enter键传输的换行符来标记输入的结束.该get()函数很像getline()但不是读取并丢弃换行符,而是get()将该字符留在输入队列中.
我正在读的书(C++的Primer Plus)是使用暗示get()过getline().我的困惑是,它不会getline()比get()确保最终更安全'\n'.另一方面,get()只会挂起输入队列中的字符,从而可能导致问题?
我的程序使用以下方法从文本文件中读取一行:
std::ifstream myReadFile("route.txt");
getline(myReadFile, line)
Run Code Online (Sandbox Code Playgroud)
如果它找到我正在寻找的东西(标签),它会将该行存储在临时字符串中.我不想继续这个,直到我找到一些其他标签,如果我找到另一个标签,我希望能够返回到前一行,以便程序读取再次作为其他标签,并做其他事情.
我一直在看putback()和unget()我很困惑如何使用它们,如果它们可能是正确的答案.
有什么好的理由可以解释:
std::string input;
std::getline(std::cin, input);
Run Code Online (Sandbox Code Playgroud)
getline调用不会等待用户输入?cin的状态是否以某种方式搞砸了?
我正在尝试将cout命令转换为c ++中的getline命令.
这是我试图改变的代码....
for (int count=0; count < numberOfEmployees; count++)
{
cout << "Name: ";
cin >> employees[count].name;
cout << "Title: ";
cin >> employees[count].title;
cout << "SSNum: ";
cin >> employees[count].SSNum;
cout << "Salary: ";
cin >> employees[count].Salary;
cout << "Withholding Exemptions: ";
cin >> employees[count].Withholding_Exemptions;
}
Run Code Online (Sandbox Code Playgroud)
我正试图改变这一行:cin >> employees[count].name;这一行:cin >> employees[count].title;进入getlines.有人可以帮忙吗?
谢谢
我有一个包含以下代码段的代码:
std::string input;
while(std::getline(std::cin, input))
{
//some read only processing with input
}
Run Code Online (Sandbox Code Playgroud)
当我运行程序代码时,我通过文件in.txt(使用gedit创建)重定向stdin输入,它包含:
ABCD
DEFG
HIJK
Run Code Online (Sandbox Code Playgroud)
上面的每一行都以in.txt文件中的一行换行结束.
我面临的问题是,在while循环运行3次后(对于每一行),程序控制不会向前移动并且卡住.我的问题是为什么会发生这种情况,我该怎么做才能解决问题?
我希望能够从命令行运行程序:
$ gcc program.cc -o out
$ ./out < in.txt
Run Code Online (Sandbox Code Playgroud)
我做了一些调试,发现while循环实际上运行了4次(第四次输入为空字符串).这导致循环编程停止,因为//只有输入读取的某些处理无法完成其工作.
所以我提出的问题:
1)为什么第四个循环运行?
在while循环条件下使用std :: getline()的基本原理必须是,当getline()无法再读取任何输入时,它返回零,因此while循环中断.
与此相反,while循环继续使用空字符串!那么为什么get循环条件中的getline呢?设计不是那么糟糕吗?
2)如何在不使用break语句的情况下确保while不会第四次运行?
现在我使用了break语句和字符串流,如下所示:
Run Code Online (Sandbox Code Playgroud)std::string input; char temp; while(std::getline(std::cin, input)) { std::istringstream iss(input); if (!(iss >>temp)) { break; } //some read only processing with input }但显然必须有一种更优雅的方式.
我试图用C++做一个简单的初学者任务.我有一个包含"John Smith 31"行的文本文件.而已.我想使用ifstream变量读取此数据.但是我想把名字"John Smith"读成一个字符串变量,然后将数字"31"读成一个单独的int变量.
我尝试使用getline函数,如下所示:
ifstream inFile;
string name;
int age;
inFile.open("file.txt");
getline(inFile, name);
inFile >> age;
cout << name << endl;
cout << age << endl;
inFile.close();
Run Code Online (Sandbox Code Playgroud)
这个问题是它输出整行"John Smith 31".是否有一种方法可以告诉getline函数在获得名称之后停止然后再"重启"以检索数字?没有操作输入文件,那是什么?