如何制作一个将名称和id输出为两个不同字符串的程序



我需要制作一个程序,以1个字符串的形式询问用户的姓名和id,然后提供一个单独的姓名和id。例如:
输入学生信息:Kobe Bean Bryant 51012345。
学生姓名:Kobe Bean Bryant
学号:51012345

我自己尝试了一下,得到了不同的输出,比如:
学生姓名:Kobe Bean Bryant
学号为:&@

这是我的代码:

#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int getNameAndID(char nameid[]) {
char name[50];
char id[50];
bool notnumber=true;
int i=0;
for (i; nameid[i]!=''; i++) {
if (nameid[i] >= '0' && nameid[i] <= '9') {
notnumber = false;
}
if (notnumber) {
name[i] = nameid[i];
}
else if (!notnumber) {
id[i] = nameid[i];
}

}
cout << "Student name is: " << name;
cout << "nStudent ID is: " << id;
}
int main() {
cout << "Enter the student information: ";
char a[50];
cin.getline(a, 50);
getNameAndID(a);
}

ID仍然有一些问题。无法理解出了什么问题,请帮帮我:(


(通过将bool和int分别设置为true和0进行编辑)

我在您的代码中发现了一些东西:

#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int getNameAndID(char nameid[]) {
char name[50];
char id[50];
bool notnumber;
int i;
for (i; nameid[i]!=''; i++) { // <---- (1)
if (nameid[i] >= 48 && nameid[i] <= 57) {
notnumber = false;
}
if (notnumber) { // <---- (2)
name[i] = nameid[i];
}
else if (!notnumber) {
id[i] = nameid[i];
}

}
cout << "Student name is: " << name;
cout << "nStudent ID is: " << id;
// <---- (3)
}
int main() {
cout << "Enter the student information: ";
char a[50];
cin.getline(a, 50);
getNameAndID(a);
}

(1)i从不初始化,它通过访问nameid[i]来调用未定义的行为。

(2)name[i] = nameid[i];这不会在name[i]上附加nameid[i](同样适用于id[i] = nameid[i];)。考虑以下内容:

index:  0 1 2 3 4 5 6 7 8 9
nameid: hello world 1 2 3 4
id:     ? ? ? ? ? ? 1 2 3 4

id的开头会有一部分未初始化的值。为id保留一个单独的索引以供分配应该可以满足您的需要。

(3)int getNameAndID()中不返回任何值,这也会调用未定义的行为。

既然你使用的是C++而不是C,那么使用std::string会让你的生活变得更轻松,你可能想做一些类似的事情:

void getNameAndID(string info) {
string name, id;
bool noDigit = true;
for (auto c : info) {
noDigit &= !isdigit(c);
if (noDigit)
name += c;
else id += c;
}
cout << "Student name is: " << name << 'n';
cout << "Student ID is: " << id;
}
int main() {
cout << "Enter the student information: ";
string info;
getline(cin, info);
getNameAndID(info);
return 0;
}

除了用于遍历输入数组nameid的索引外,还需要为nameid保留不同的索引。在插入字符后增加每个char数组的索引,并在末尾记住添加null终止符。

CCD_ 14需要初始化为零。

最新更新