如何以简单的方式从 C++ 中的循环中删除最后一个逗号?
How can I remove the last comma from a loop in C++ in a simple way?
此程序用于打印素数直到给定输入并用逗号分隔每个素数。
void main(){
int N, counter=0, isPrime;
int k, j;
cout << "Enter maximum range: ";
cin >> N;
for (j=2; j<=N; j++){
isPrime = 0;
k = 2;
while (k<j){
if (j%k==0){
isPrime++;
}
k++;
}
if (isPrime==0){
if (k==N){
cout << j;
}
else{
cout << j << ",";
}
counter++;
}
}
cout << endl;
system("pause");
}
它只是删除质数输入的最后一个逗号,而不是任何其他输入。我该如何解决这个问题?
Input: 23
Output: 2,3,5,7,11,13,17,19,23
Input: 8
Output: 2,3,5,7,
Input: 9
Output: 2,3,5,7,
不要删除最后一个逗号。而是在每个条目 之前 插入逗号,第一个条目除外。
先决条件:
bool first = true;
for(j=2;j<=N;j++){
// ...
if(k==N) {
if(!first) {
cout << ',';
}
else {
first = false;
}
cout<<j;
}
最简单的方法是手动输出第一个或最后一个值:
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int N, counter = 0;
bool isPrime;
cout << "Enter maximum range: ";
cin >> N;
if (N>=2) {
cout << "2";
}
for (int j = 3; j <= N; ++j) {
isPrime = true;
for (int k = 2; k < sqrt(j)+1; ++k) {
if (j % k == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
cout << ", " << j;
counter++;
}
}
cout << endl;
system("pause");
}
没必要if then else
那么多:
std::string delim = "";
for( auto&& item : vec )
{
std::cout << delim << item;
delim = ",";
}
不需要对所有情况进行检查,例如向量是否为空。
如果一开始就接受一个额外的space,直接把string换成char,性能会更上一层楼
要轻松删除最后一个逗号,您可以使用 '\b'
字符。
for(auto item : vec)
std::cout << item << ", " ;
std::cout << "\b\b " << std::endl;
对现有代码进行最少的更改:
#include <iostream>
#include <string>
using namespace std;
void main()
{
int N, counter = 0, isPrime;
string separator = ""; // none at first
int k, j;
cout << "Enter maximum range: ";
cin >> N;
for(j = 2; j <= N; j++)
{
isPrime = 0;
k = 2;
while(k<j)
{
if(j%k == 0)
{
isPrime++;
break; // exit while loop
}
k++;
}
if(isPrime == 0)
{
// if(k==N) not needed
cout << separator << j;
separator = ","; // comma after first
counter++;
}
}
cout << endl;
system("pause");
}
说明
基本上,我添加了一个分隔符字符串,它在开始时是空白的,即空字符串,但在第一个输出之后为每个输出设置为逗号。因此,cout
语句不会在第一个数字之前打印逗号,但会为每个后续数字打印。
此程序用于打印素数直到给定输入并用逗号分隔每个素数。
void main(){
int N, counter=0, isPrime;
int k, j;
cout << "Enter maximum range: ";
cin >> N;
for (j=2; j<=N; j++){
isPrime = 0;
k = 2;
while (k<j){
if (j%k==0){
isPrime++;
}
k++;
}
if (isPrime==0){
if (k==N){
cout << j;
}
else{
cout << j << ",";
}
counter++;
}
}
cout << endl;
system("pause");
}
它只是删除质数输入的最后一个逗号,而不是任何其他输入。我该如何解决这个问题?
Input: 23
Output: 2,3,5,7,11,13,17,19,23
Input: 8
Output: 2,3,5,7,
Input: 9
Output: 2,3,5,7,
不要删除最后一个逗号。而是在每个条目 之前 插入逗号,第一个条目除外。
先决条件:
bool first = true;
for(j=2;j<=N;j++){
// ...
if(k==N) {
if(!first) {
cout << ',';
}
else {
first = false;
}
cout<<j;
}
最简单的方法是手动输出第一个或最后一个值:
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int N, counter = 0;
bool isPrime;
cout << "Enter maximum range: ";
cin >> N;
if (N>=2) {
cout << "2";
}
for (int j = 3; j <= N; ++j) {
isPrime = true;
for (int k = 2; k < sqrt(j)+1; ++k) {
if (j % k == 0) {
isPrime = false;
break;
}
}
if (isPrime) {
cout << ", " << j;
counter++;
}
}
cout << endl;
system("pause");
}
没必要if then else
那么多:
std::string delim = "";
for( auto&& item : vec )
{
std::cout << delim << item;
delim = ",";
}
不需要对所有情况进行检查,例如向量是否为空。
如果一开始就接受一个额外的space,直接把string换成char,性能会更上一层楼
要轻松删除最后一个逗号,您可以使用 '\b'
字符。
for(auto item : vec)
std::cout << item << ", " ;
std::cout << "\b\b " << std::endl;
对现有代码进行最少的更改:
#include <iostream>
#include <string>
using namespace std;
void main()
{
int N, counter = 0, isPrime;
string separator = ""; // none at first
int k, j;
cout << "Enter maximum range: ";
cin >> N;
for(j = 2; j <= N; j++)
{
isPrime = 0;
k = 2;
while(k<j)
{
if(j%k == 0)
{
isPrime++;
break; // exit while loop
}
k++;
}
if(isPrime == 0)
{
// if(k==N) not needed
cout << separator << j;
separator = ","; // comma after first
counter++;
}
}
cout << endl;
system("pause");
}
说明
基本上,我添加了一个分隔符字符串,它在开始时是空白的,即空字符串,但在第一个输出之后为每个输出设置为逗号。因此,cout
语句不会在第一个数字之前打印逗号,但会为每个后续数字打印。