strspn c++下的奇怪行为,为什么
strspn Strange behavior under c++, why?
这是我制作的一个程序:
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char frase1 [100];
char frase2 [100];
cin >> frase1;
cin >> frase2;
char * parola1 = strtok (frase1, " .");
char * parola2 = strtok (frase2, " .");
int i;
i = strspn (parola1, parola2);
int j;
j = strspn (parola2, parola1);
cout << i << " " << j;
return 0;
}
它应该要求将2个句子存储到frase1
和frase2
中,然后两个标记器将两个指针设置到各自数组的第一个字,然后我应该返回值i
和j
,它们是由strspn
函数给定的int。
因此,当终端出现时,应该能够放置例如"veritas omnia vincit"
和"vetirsa omnia vincit"
,然后得到7 7
作为输出。
相反,我插入第一个句子,它返回第一个句子的第一个和第二个单词之间的strspn值(veritas,omnia(。
这是一种尝试,旨在隔离一个更大程序中出现的问题,我将立即向您展示:
#include <iostream>
#include <cstring>
using namespace std;
void eliminaVocali (char [], char []);
int controlloAnagramma (char*, char []);
bool controlloParola (char[]);
int main() {
char frase [10];
cin >> frase;
cout << "yolo1";
char fraseCorretta [100];
cout << "yolo";
eliminaVocali(frase, fraseCorretta);
if (controlloParola(fraseCorretta)) cout << "TRUE!!";
else cout << "FALSE :(";
}
void eliminaVocali (char frase [], char fraseCorretta []){
int counter = 0;
for (int i = 0; i < 100; i++){
if (frase[i] != 'a' && frase[i] != 'e' && frase[i] != 'i' && frase[i] != 'o' && frase[i] != 'u'){
fraseCorretta[counter] = frase[i];
counter++;
}
}
}
bool controlloParola (char frase []){
char * parola = strtok (frase, " .");
if (controlloAnagramma (parola, frase) > 2) return true;
while (parola != NULL){
parola = strtok(NULL, " .");
if (controlloAnagramma (parola, frase) > 2) return true;
}
return false;
}
int controlloAnagramma (char * parola, char frase []){
int counter = 0;
char * check = new char [100];
check = frase;
char * parola2 = strtok (check, " .");
if (strlen(parola) == strlen(parola2) && strlen(parola) == strspn(parola, parola2) && strlen(parola) == strspn(parola2, parola)) counter++;
while (parola2 != NULL){
parola2 = strtok (NULL, " .");
if (strlen(parola) == strlen(parola2) && strlen(parola) == strspn(parola, parola2) && strlen(parola) == strspn(parola2, parola)) counter++;}
delete[] check;
return counter;
}
该程序接收一个句子,从中删除所有元音,然后检查新形成的单词中是否有2个单词,其中一个是另一个的变位词。
eliminaVocali删除元音controlloParola在给定的时间提取句子中的一个单词,并将其发送给controlloAnagrammacontrolloAnagramma取单词并在整句中搜索变位词
该程序提供
1[main]testingstuff 93304 cygwin_exception::open_stackdumpfile:转储堆栈跟踪到testingstuff.exe.stackdump
其中testingstuff是程序名称。
问题应该在controlloAnagramma中,我在其中使用strlen
和strspn
。
知道一个有用的事实:两个yolo cout
都没有打印到主屏幕上。
请注意,这是一个教学程序,我只能将c++与<cstring>
一起使用。
问题是,为什么strspn
命令会有这种行为?它应该能解决大问题。提前谢谢。
编辑:
cin >> frase1;
cin >> frase2;
应为:
cin.getline(frase1, 100);
cin.getline(frase2, 100);
正如@anton savin所指出的。
还有
check = frase;
应该是
strcpy (check, frase);
错误仍然存在。
cin >> frase1;
cin >> frase2;
operator>>
逐字读取字符串,因此frase1
变成"veritas"
,frase2
变成"omnia"
。要逐行读取输入,请使用getline
:
cin.getline(frase1, 100);
cin.getline(frase2, 100);
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 为什么在全局范围内使用"extern int a"似乎不行?
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 为什么会发生堆损坏
- 为什么使用 "this" 指针调用派生成员函数?
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么比较运算符如此快速
- 为什么 Serial.println(<char[]>);返回随机字符?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 为什么不;名字在地图上是按顺序排列的吗
- 我的字符计数代码计算错误.为什么
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 为什么 std::unique 不调用 std::sort?
- 既然存在危险,为什么项目要使用-I include开关
- 为什么在运行时没有向我们提供有关分段错误的更多信息?