c++ - 我用 C++ 编写了一个程序,通过空格键将单词从一行中分离出来,并将这些单词显示为一个数组。我的代码有什么问题?
问题描述
请帮我找出这个程序中的一个错误。它用空格键将一行分隔成单词。并显示为列表。如果单词的第一个字符为小写,则将其转换为大写。
#include <iostream>
#include <string>
using namespace std;
int main()
{
char line[30]="Hi there buddy",List[10][20];
unsigned int i=0,List_pos=0,no;
int first=0,last;
while(i!=sizeof(line)+1)
{
if(line[i]==' ' or i==sizeof(line))
{
last=i;
no=0;
for(int j=first;j<last;++j)
{
if(no==0)
List[List_pos][no]=toupper(line[j]);
else
List[List_pos][no]=line[j];
++no;
}
++List_pos;
first=last+1;
}
++i;
}
for(unsigned int a=0;a<List_pos;++a)
cout<<"\nList["<<a+1<<"]="<<List[a];
return 0;
}
预期输出:
List[1]=Hi
List[2]=There
List[3]=Buddy
实际输出:
List[1]=Hi
List[2]=ThereiXŚm
List[3]=Buddy
解决方案
我建议你使用一个字符串,因为你已经包含了它。在这种情况下,'List 并不是真正必要的。尝试制作一个 for 循环,将行分隔成单词,在我看来,当您使用数组时,您应该使用 for 循环。在你的 for 循环中,当你遍历该行时,你可以添加一个 if 语句来确定你是否在一个单词的末尾。我认为您的代码中的问题是多个循环,但我不确定。
我为您提供了一个有效的代码。只需使其适应您的显示要求,您就可以了
#include <iostream>
#include <string>
using namespace std;
int main()
{
string line = "Hi there buddy";
for (int i = 0; i < line.size(); i++) {
if (line[i] == ' ') {
line[i + 1] = toupper(line[i+1]);
cout<<'\n';
} else {
cout<<line[i];
}
}
return 0;
} ```