C++没有从字符串中删除空格
C++ not removing spaces from string
我想首先删除字符串的空格,然后将字符串输入到函数"calcPnct()",该函数将输出每个字符在该字符串中出现的百分比。我在网上查过如何删除空格,但我特别想使用for循环。我尝试过的方法都不起作用,为什么不起作用呢?
#include <iostream>
#include <cmath>
using namespace std;
double calcPnct(string input, int i);
int main()
{
string input, orig;
int count = 0;
string alphabet = "abcdefghijklmnopqrstuvwxyz";
cout << "Enter string: " << endl;
cin >> input;
//main problem is this for loop not working
for (int i = 0; i < input.length(); i++)
{
if ( input[i] == ' ' )
{
for ( int j = i; j < input.length(); j++ )
{
input[j] = input[j+1];
}
i = i - 1;
}
}
for(int k = 0; input[k] != ' '; k++)
{
input[k] = tolower(input[k]);
}
for(int l = 0; l < 26; l++)
{
cout << alphabet.at(l) << ": " << calcPnct(input,l) << " %" <<endl;
}
return 0;
}
double calcPnct(string input, int index)
{
double total;
double aNum = 0, bNum = 0, cNum = 0, dNum = 0, eNum = 0, fNum = 0, gNum = 0, hNum = 0;
double iNum = 0, jNum = 0, kNum = 0, lNum = 0, mNum = 0, nNum = 0, oNum = 0, pNum = 0;
double qNum = 0, rNum = 0, sNum = 0, tNum = 0, uNum = 0, vNum = 0, wNum = 0, xNum = 0, yNum = 0, zNum = 0;
for(int i = 0; i < input.length(); i++)
{
if(input[i] != '.' && input [i] != ',')
{
total ++;
}
}
switch(index)
{
case 0:
for(int a = 0; a < input.length(); ++a)
{
if(input.at(a) == 'a')
{
aNum++;
}
}
return aNum/total * 100;
break;
case 1:
for(int b = 0; b < input.length(); ++b)
{
if(input.at(b) == 'b')
{
bNum++;
}
}
return bNum/total * 100;
break;
case 2:
for(int c = 0; c < input.length(); ++c)
{
if(input.at(c) == 'c')
{
cNum++;
}
}
return cNum/total * 100;
break;
case 3:
for(int d = 0; d < input.length(); ++d)
{
if(input.at(d) == 'd')
{
dNum++;
}
}
return dNum/total * 100;
break;
case 4:
for(int e = 0; e < input.length(); ++e)
{
if(input.at(e) == 'e')
{
eNum++;
}
}
return eNum/total * 100;
break;
case 5:
for(int f = 0; f < input.length(); ++f)
{
if(input.at(f) == 'f')
{
fNum++;
}
}
return fNum/total * 100;
break;
case 6:
for(int g = 0; g < input.length(); ++g)
{
if(input.at(g) == 'g')
{
gNum++;
}
}
return gNum/total * 100;
break;
case 7:
for(int h = 0; h < input.length(); ++h)
{
if(input.at(h) == 'h')
{
hNum++;
}
}
return hNum/total * 100;
break;
case 8:
for(int i = 0; i < input.length(); ++i)
{
if(input.at(i) == 'i')
{
iNum++;
}
}
return iNum/total * 100;
break;
case 9:
for(int j = 0; j < input.length(); ++j)
{
if(input.at(j) == 'j')
{
jNum++;
}
}
return jNum/total * 100;
break;
case 10:
for(int k = 0; k < input.length(); ++k)
{
if(input.at(k) == 'k')
{
kNum++;
}
}
return kNum/total * 100;
break;
case 11:
for(int l = 0; l < input.length(); ++l)
{
if(input.at(l) == 'l')
{
lNum++;
}
}
return lNum/total * 100;
break;
case 12:
for(int m = 0; m < input.length(); ++m)
{
if(input.at(m) == 'm')
{
mNum++;
}
}
return mNum/total * 100;
break;
case 13:
for(int n = 0; n < input.length(); ++n)
{
if(input.at(n) == 'n')
{
nNum++;
}
}
return nNum/total * 100;
break;
case 14:
for(int o = 0; o < input.length(); ++o)
{
if(input.at(o) == 'o')
{
oNum++;
}
}
return oNum/total * 100;
break;
case 15:
for(int p = 0; p < input.length(); ++p)
{
if(input.at(p) == 'p')
{
pNum++;
}
}
return pNum/total * 100;
break;
case 16:
for(int q = 0; q < input.length(); ++q)
{
if(input.at(q) == 'q')
{
qNum++;
}
}
return qNum/total * 100;
break;
case 17:
for(int r = 0; r < input.length(); ++r)
{
if(input.at(r) == 'r')
{
rNum++;
}
}
return rNum/total * 100;
break;
case 18:
for(int s = 0; s < input.length(); ++s)
{
if(input.at(s) == 's')
{
sNum++;
}
}
return sNum/total * 100;
break;
case 19:
for(int t = 0; t < input.length(); ++t)
{
if(input.at(t) == 't')
{
tNum++;
}
}
return tNum/total * 100;
break;
case 20:
for(int u = 0; u < input.length(); ++u)
{
if(input.at(u) == 'u')
{
uNum++;
}
}
return uNum/total * 100;
break;
case 21:
for(int v = 0; v < input.length(); ++v)
{
if(input.at(v) == 'v')
{
vNum++;
}
}
return vNum/total * 100;
break;
case 22:
for(int w = 0; w < input.length(); ++w)
{
if(input.at(w) == 'w')
{
wNum++;
}
}
return wNum/total * 100;
break;
case 23:
for(int x = 0; x < input.length(); ++x)
{
if(input.at(x) == 'x')
{
xNum++;
}
}
return xNum/total * 100;
break;
case 24:
for(int y = 0; y < input.length(); ++y)
{
if(input.at(y) == 'y')
{
yNum++;
}
}
return yNum/total * 100;
break;
case 25:
for(int z = 0; z < input.length(); ++z)
{
if(input.at(z) == 'z')
{
zNum++;
}
}
return zNum/total * 100;
break;
}
}
您读取的字符串中没有空格。
cin >> input;
将只读取非空白字符。
如果要读取整行(包括空格),请使用getline
。
getline(cin, input);
相关文章:
- 使用另一个字符串从字符串中删除空格
- 如何删除已输入的书以及如何使标题,语言和名称在上面放置空格不会出错?
- 从文件中读取多行.txt字符串删除空格并创建新文件进行输出
- 从字符串中删除空格未生效
- 为什么在写入文件时删除空格无法读取文件
- 删除空格后如何将其插入字符串中
- 如何修改数组,从中删除空格,然后将其存储在新数组中
- 在期间和逗号之前从字符串中删除空格
- 从C 中的字符串中删除空格
- std::getline 删除空格
- 从 c 字符串中删除空格和特殊字符
- 删除空格时遇到问题.C++
- C++没有从字符串中删除空格
- 从字符串中删除空格,不包括 " 和 ' C++对之间的部分
- c++删除空格
- 从字符串中删除空格
- 如何通过检查v. dictionary来查找一个短语中删除空格的单词数
- 从字符数组/字符串中删除空格
- 从文本文件开头的行中删除空格
- 当从c#调用外部dll时,从命令行参数中删除空格