我正在阅读一个文件,其中包含以下字样:
“连接”,“课程”,“提要”..
我需要将每个字符转换为小写,然后调用一个函数从每个单词中删除后缀。比如,首先是连接,然后是课程......
我完成了剩下的部分,但是在读取文件并将数据存储在数组中时遇到了问题。
我在文件中至少有50个这样的单词。存储它的最佳方法是什么?
{
int val=0; char fin_char;
string line;string arr[100];
ifstream myfile("testfile.txt");
if (myfile.is_open())
{
while(myfile.good())
{
getline(myfile,line);
arr[i]=line;
i++;
}
myfile.close();
for (int j=0;j<i;j++)
{
while (arr[j][k]!='\0')
{
c=arr[j][k];
cout<<"C"<<c<<" "<<"J:"<<" "<<j<<"K:"<<k<<"\n";
val=int(c);
if (val>=65&&val<=90){ val=val+32;fin_char=static_cast<char>(val);arr[j][k]=fin_char;}
k++;
}
}
for (int j=0;j<i-1;j++)
{
cout<<" "<<arr[j]<<"\n";
}
system("pause");
return 0;
}
这是我得到的输出:
C99 J:0 K:0 C111 J:0 K:1 C110 J:0 K:2 C110 J:0 K:3
答案 0 :(得分:1)
如果您想要一个随机访问容器(如数组)而不声明它的大小,请使用STL中的vector。
答案 1 :(得分:0)
如何在文本文件中存储单词?因为除非每个单词都在一个新行中,否则你的arr
数组只有一个元素带有很长的字符串。
同样,Bartosz-Marcinkowski建议使用矢量。您仍然可以访问每个角色,只需将其用作2D阵列。
如果您需要文本文件中一行中的所有单词,那么我建议根据空格拆分该行,如果您愿意,可以使用此功能:
#include "sstream"
#include "vector"
#include "string"
vector<string> split(const string str)
{
stringstream ss(str);
string buf;
vector<string> elems;
while(ss >> buf)
elems.push_back(buf);
return elems;
}
返回一行中所有单词的向量。所以,你可以像这样使用它:
int main()
{
string line,
vector<string> arr;
ifstream myfile("testfile.txt");
if(myfile.is_open())
getline(myfile,line);
arr = split(line);
}
现在如果您想要访问第5个单词中的第3个字符,您只需要arr[4][2]