getline(cin,str,'\r');如何输入才能跳出getline函数
时间: 2024-06-04 11:08:59 浏览: 80
在 Windows 系统下,可以通过输入两次回车来跳出 `getline` 函数,因为 Windows 下的换行符是由两个字符组成的:"\r\n"。所以第一次输入回车会被 `getline` 函数读取为 "\r" 字符,而不是结束符号,需要再输入一次回车才能将 "\r\n" 作为结束符号,从而跳出函数。在 Linux 或 Mac 系统下,只需要输入一次回车即可。
相关问题
getline(cin,str,'\r');一直输入回车也无法跳出
如果一直输入回车也无法跳出 `getline` 函数,可能是因为系统默认的换行符不是 "\r",或者 `getline` 函数的第三个参数不正确。在 Windows 系统下,可以尝试使用 "\n" 或者 "\r\n" 作为结束符号,例如:
```cpp
getline(cin, str, '\n');
```
或者
```cpp
getline(cin, str, "\r\n");
```
如果还是无法跳出函数,可以尝试使用其他的输入函数,例如 `gets` 或者 `fgets`。
// 包含字符串函数库 #include <string.h> #include <iostream> using namespace std; int frequency(char * substr, char * str); int main() { char sub[128],str[1024]; cin.getline(sub,128); // 输入子串 cin.getline(str,1024); // 输入长串 int n = frequency(sub,str); // 调用frequency函数,计算子串在长串中出现的次数 cout<<n<<endl; // 输出次数 return 0; } // 函数frequency:计算子串在长串中出现的次数 // 参数:substr-指向子串,str-指向长串 // 返回值:出现的次数 int frequency(char * substr, char * str) { // 请在此添加代码,实现函数frequency /********** Begin *********/ int n=0; char *p=substr; int l1=strlen(substr); int l2=strlen(str); while(true){ if(strstr(substr+(p-substr),str)!=NULL){ p=strstr(substr+(p-substr),str); p=p+l2; if(l1-(p-substr)<l2){ n++; break; } else n++; } else break; } return n; /********** End **********/ }这段代码无法正确返回子串在字符串中出现的次数,问题出在哪?
这段代码中存在以下问题:
1. 在函数`frequency()`中,`substr`指向的是子串的首地址,而在`while`循环中,又将其当作长串的一部分,应该将`str`和`substr`的位置颠倒,即将`substr`当作长串,将`str`当作子串。
2. 在`while`循环中,`strstr()`函数的第一个参数应该是长串,第二个参数应该是子串,而当前的代码中却是反过来的。
3. 在`while`循环中,当子串在长串中出现时,计数器`n`应该加1,而当前的代码中却是在子串长度小于或等于长串剩余部分的时候才加1,这样会导致最后一个子串没有被计数。
修改后的代码如下:
```c++
#include <string.h>
#include <iostream>
using namespace std;
int frequency(char * str, char * substr);
int main() {
char str[1024], substr[128];
cin.getline(str, 1024);
cin.getline(substr, 128);
int n = frequency(str, substr);
cout << n << endl;
return 0;
}
int frequency(char * str, char * substr) {
int n = 0;
char *p = str;
int l1 = strlen(str);
int l2 = strlen(substr);
while (true) {
p = strstr(p, substr);
if (p != NULL) {
n++;
p += l2;
if (p - str + l2 > l1) {
break;
}
} else {
break;
}
}
return n;
}
```
注意到我们在`while`循环内部先使用`strstr()`函数查找子串在长串中的位置,如果找到了,则计数器`n`加1,然后将`p`指向子串后面的位置。接着判断`p`指向的位置是否已经超出了长串的末尾,如果是则跳出循环。如果没有找到子串,则直接跳出循环。
阅读全文