1

句読点文字を含む入力文字列を受け取り、それらの句読点を削除した出力文字列を返す単純な C++ プログラムを実装しようとしています。プログラムは

#include<iostream>
#include<cctype>
using namespace std;
int main()
{
   int index=0;
   string sequence1,sequence2;
   cout<<"enter the sequence"<<endl;
   getline(cin,sequence1);
   for(index=0;index<20;++index)
      if(!ispunct(sequence1[index]))
         sequence2[index]=sequence1[index];
   cout<<sequence2<<endl;
   return 0;
}

というエラーが表示されld returned 1 exit statusます。合計エラーは

progprac: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o:(.text+0x0): first defined here
progprac: In function `_fini':
(.fini+0x0): multiple definition of `_fini'
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o:(.fini+0x0): first defined here
progprac:(.rodata+0x0): multiple definition of `_IO_stdin_used'
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o:(.rodata.cst4+0x0): first defined here
progprac: In function `__data_start':
(.data+0x0): multiple definition of `__data_start'
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o:(.data+0x0): first defined here
progprac: In function `__data_start':
(.data+0x8): multiple definition of `__dso_handle'
/usr/lib/gcc/x86_64-linux-gnu/4.6/crtbegin.o:(.data+0x0): first defined here
progprac: In function `_init':
(.init+0x0): multiple definition of `_init'
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crti.o:(.init+0x0): first defined here
/tmp/ccpOfw2A.o: In function `main':
progprac.cc:(.text+0x0): multiple definition of `main'
progprac:(.text+0xe4): first defined here
/usr/lib/gcc/x86_64-linux-gnu/4.6/crtend.o:(.dtors+0x0): multiple definition of `__DTOR_END__'
progprac:(.dtors+0x8): first defined here
/usr/bin/ld: error in progprac(.eh_frame); no .eh_frame_hdr table will be created.
collect2: ld returned 1 exit status

関数を宣言して定義しないリンカエラーであることをオンラインで確認しました。しかし、私はそのようなエラーを犯していません。エラーは何ですか?

4

1 に答える 1

1

-oin compile 行を見逃しました。

g++ -o progprac progprac.cc

最初の問題を解決した後、

空の文字列sequence2を作成し、forループでif値を割り当てるチェックを行い、その添え字としてsequence2使用します。index場合によっては ( の文字位置に何も割り当てない句読点がある場合sequence2)。文字列がまだ"".

を使用sequence2.at(index)するとout of range、文字列がそれらの場所に存在しない[文字がありません]ことを意味します。

演算子を使用する+と、文字を既存の文字列に連結するため (で始まる"") 、これらの問題が解消されます。

         sequence2 += sequence1[index];
于 2013-06-10T14:15:25.870 に答える